欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用python/casperjs編寫(xiě)終極爬蟲(chóng)-Google Keyword Tool Scraper(selenium+python version)

1.緣起

  隨著(zhù)移動(dòng)互聯(lián)網(wǎng)的發(fā)展,現在寫(xiě)web和我三年前剛開(kāi)始寫(xiě)爬蟲(chóng)的時(shí)候已經(jīng)改變了太多。特別是在node以及javascript/ruby社區的努力下,以往“服務(wù)器端”做的事情都慢慢搬到了“瀏覽器”來(lái)實(shí)現,最極端的例子可能是meteor了 ,寫(xiě)web程序無(wú)需劃分前端后端的時(shí)代已經(jīng)到來(lái)了。。。

  在這一方面,Google一向是最激進(jìn)的??v觀(guān)Google目前的產(chǎn)品線(xiàn),社交的Google Plus,網(wǎng)站分析的Google Analytics,Google目前賴(lài)以生存的Google Adwords等,如果想下載源碼,用ElementTree來(lái)解析網(wǎng)頁(yè),那什么都得不到,因為Google的數據都是通過(guò)Ajax調用經(jīng)過(guò)數據混淆處理的數據,然后用JavaScript進(jìn)行解析渲染到頁(yè)面上的。

  本來(lái)這種事情也不算太多,忍一忍就行了,不過(guò)最近因業(yè)務(wù)需要,經(jīng)常需要上Google的Keyword Tools來(lái)分析特定關(guān)鍵字的搜索量

  

  圖為關(guān)鍵字搜索的截圖

  

  圖為Google經(jīng)過(guò)混淆處理的Ajax返回結果。

  要把這么費勁的事情自動(dòng)化倒也不難,因為Google也提供了API來(lái)做,Adwords項目的TargetingIdeaService就是來(lái)做這個(gè)的,問(wèn)題是Google的API調用需要花錢(qián),而如果能用爬蟲(chóng)技術(shù)來(lái)爬取這個(gè)結果,就能省去不必要的額外開(kāi)銷(xiāo)。

2. Selenium WebDriver

  由于要解析執行復雜的JavaScript,必須有一個(gè)Full Stack的瀏覽器JavaScript環(huán)境,這種環(huán)境三年前的話(huà),可能只能訴諸于于selenium,selenium是一款多語(yǔ)言的瀏覽器Driver,它最大的優(yōu)點(diǎn)在于,提供了從命令行統一操控多種不同瀏覽器的方法,這極大地方便了web產(chǎn)品的兼容性自動(dòng)化測試。

2.1 在沒(méi)有圖形界面的服務(wù)器上安裝和使用Selenium

  安裝selenium非常簡(jiǎn)單,pip install selenium 即可,但是要讓firefox/chrome工作,沒(méi)有圖形界面的話(huà),還是要費一番功夫的。

  推薦的做法是

  Selenium的安裝和配置在此就不多說(shuō)了,值得注意的是,如果是Ubuntu用戶(hù),并且要使用Chrome的話(huà),必須額外下載一個(gè)chromedriver,并且把安裝的chromium-browser鏈接到/usr/bin/google-chrome,否則將無(wú)法運行。

2.2 爬取Keywords

  先總結一下Adwords的使用方法吧,要能正常使用Adwords,必須要有一個(gè)開(kāi)通Adwords的Google Account,這倒不是很難,只要訪(fǎng)問(wèn) http://adwords.google.com ,Google會(huì )協(xié)助創(chuàng )建賬號,如果還沒(méi)有的話(huà),其次就是登陸了。

  

  通過(guò)分析登陸頁(yè)面,我們可以看到需要在id為Email的一個(gè)input框內輸入email,然后在id為Passwd的密碼框內輸入密碼,然后點(diǎn)擊Sign in提交這個(gè)頁(yè)面內唯一的form。

  首先別忘了開(kāi)一個(gè)瀏覽器先

  登陸后,我們發(fā)現需要訪(fǎng)問(wèn)一個(gè)類(lèi)似 https://adwords.google.com/o/Targeting/Explorer 的網(wǎng)頁(yè)才能跳轉到關(guān)鍵字工具,于是我們手動(dòng)生成一下這個(gè)網(wǎng)頁(yè)

  到了工具主頁(yè)以后,事情就變得Tricky起來(lái)了。因為整個(gè)關(guān)鍵字工具都是個(gè)客戶(hù)端App,在全部文件載入完成以后,頁(yè)面不會(huì )直接渲染完畢,而是要經(jīng)過(guò)復雜的JavaScript運算后頁(yè)面才會(huì )完整顯示。然而Selenium WebDriver并不知道這一點(diǎn),所以我們要讓他知道。

  在這里,我們要等待Search按鈕在瀏覽器中出現以后,才能確認網(wǎng)頁(yè)加載完畢,Selenium WebDriver有兩種方式可以實(shí)現這一點(diǎn),我偷懶用了全局的默認等待機制:

  于是Selenium就會(huì )在找不到頁(yè)面元素的時(shí)候自動(dòng)等候不超過(guò)30秒

  接下來(lái),等待輸入框和Search按鈕出現后提交搜索iphone關(guān)鍵字的請求

  然后我們繼續等待class為sLNB的table的出現,并解析結果

  這里我們使用了xpath來(lái)提取網(wǎng)頁(yè)特征,這也算是寫(xiě)爬蟲(chóng)的必備吧。

  完整的例子見(jiàn): https://gist.github.com/3798896 替換email和passwd后直接就能用了

3. JavaScript Headless解決方案

  隨著(zhù)Node以及隨之而來(lái)的JavaScript社區的進(jìn)化,如今的我們就幸福多了。遠的我們有phantomjs, 一個(gè)Headless的WebKit Driver,意味著(zhù)可以無(wú)需GUI,完全模擬Chrome/Safari的操作。 近的有casperjs(基于phantomjs的好用封裝),zombie(相比phantomjs的優(yōu)勢是可以和node集成)等。

  其中非??上У厥?,zombiejs似乎對富JavaScript網(wǎng)站支持得有問(wèn)題,所以后來(lái)我還是只能用casperjs來(lái)進(jìn)行測試。Headless的方案因為不需要渲染GUI,執行速度約為Selenium方案的三倍。

  另外由于這是純JavaScript的方案,于是我們可以直接在例如Chrome的Console模式下寫(xiě)代碼控制瀏覽器,不存在如Selenium那樣還需要語(yǔ)義轉換,非常簡(jiǎn)潔直觀(guān)。例如利用W3C Selectors API Level 1所提供的querySelector來(lái)快速選取元素,對表單進(jìn)行submit,對按鈕進(jìn)行click,甚至可以執行自定義JavaScript腳本以便按一定規律對頁(yè)面進(jìn)行操控。

  但是casperjs或者說(shuō)phantomjs的弱點(diǎn)是不支持除了文件讀寫(xiě)和瀏覽器操作以外的一切*nix IPC慣用伎倆,socket神馬的統統不支持,1.4版本以后才加入了一個(gè)webserver用于和外界通信,但是用httpserver來(lái)和外界通信?我有點(diǎn)抵觸就是了。

  廢話(huà)不說(shuō)了,casperjs的代碼看起來(lái)就是這樣,登陸:

  與Selenium類(lèi)似,因為頁(yè)面都是Ajax調用的,我們需要明確地“等待某個(gè)元素出現”,即:waitForSelector,casperjs的文檔既簡(jiǎn)潔又漂亮,不妨多逛逛。

  值得一提的是,casperjs一定要調用casper.run方法,之前的start, then等方法,只是把步驟封裝到了this._steps里面,只有在run的時(shí)候才會(huì )真正執行,所以casperjs設計流程的時(shí)候會(huì )很痛苦,for/each之類(lèi)的手法有時(shí)并不好用。

  這個(gè)時(shí)候需要用JavaScript編程比較常用的遞歸化的方法,參見(jiàn)https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js 這個(gè)例子。我在完整的casperjs代碼里面也是這么做的。

  具體邏輯的實(shí)現和selenium類(lèi)似,我就不廢話(huà)了,完整的例子參見(jiàn): https://gist.github.com/3798922

4. 綜上

  介紹了selenium和casperjs兩種不同的終極爬蟲(chóng)寫(xiě)法,但是其實(shí)這篇文寫(xiě)來(lái)只是太久沒(méi)更新了,寫(xiě)點(diǎn)東西更新一下而已:)

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Google推出的爬蟲(chóng)新神器:Pyppeteer,神擋殺神,佛擋殺佛!
Mac上配置 Selenium Webdriver
Python3網(wǎng)絡(luò )爬蟲(chóng)課程 使用 selenium 爬取動(dòng)態(tài)網(wǎng)頁(yè)
得來(lái)全不費功夫,使用Python爬蟲(chóng)自動(dòng)采集Cookies、URL等網(wǎng)頁(yè)數據
Selenium + Headless Chrome with Python3
python3+msedgedriver用新版msedge進(jìn)行chrome-handless測試
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久