您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關scrapy爬蟲如何爬取javascript內容,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
很多網站都使用javascript...網頁內容由js動態生成,一些js事件觸發的頁面內容變化,鏈接打開.甚至有些網站在沒有js的情況下根本不工作,取而代之返回你一條類似"請打開瀏覽器js"之類的內容.
對javascript的支持有四種解決方案:
1,寫代碼模擬相關js邏輯.
2,調用一個有界面的瀏覽器,類似各種廣泛用于測試的,selenium這類.
3,使用一個無界面的瀏覽器,各種基于webkit的,casperjs,phantomjs等等.
4,結合一個js執行引擎,自己實現一個輕量級的瀏覽器.難度很大.
對于簡單的有限爬取任務,若可以通過代碼模擬js邏輯,首選這種方案,例如,在duckduckgo搜索引擎中,翻頁這個動作是靠js觸發的.模擬似乎還是很難,然后我注意到他頁面的第二個form,似乎submit后就可以翻頁,試了一下果然如此.
在寫代碼模擬相關js邏輯時,首先試下關閉瀏覽器的js,看下是否能獲取到需要的東西.有些頁面提供了沒有js的兼容.不行再開chrome的控制臺或firebug觀察js邏輯,可能是ajax這類收發包.用urllib2(推薦requests庫)模擬即可,也可能是修改dom之類,用lxml這類對應修改即可.說來就是js執行了什么,就用python代碼對應模擬執行.
也可選擇使用selenium這類,缺點是效率很低,你應當先測試一下selenium啟動一個瀏覽器實例所需時間你是否可接受.這個時間一般在秒級別.再考慮到瀏覽器打開頁面渲染,就更慢了.在效率可接受的前提下,這個方案也不錯.
這個方案的另一個問題是在沒有桌面環境的服務器上,selenium目測無法運行.
對規模不小,模擬js不可行,selenium效率太低,或需要在無桌面環境上執行的情況.有無界面瀏覽器,幾個無界面瀏覽器大體情況如下:
1,casperjs,phantomjs:非py,可以通過命令行調用,功能基本滿足,推薦先看下這兩個是否滿足.比較成熟.phantomjs還有一個非官方的webdriver協議實現,由此可通過selenium調phantomjs實現無界面.
2,ghost,spynner等:py定制的webkit,個人覺得spynner代碼亂,ghost代碼質量不錯.但有bug.我看過幾個這類庫后自己改了一個.
這種方案的詳細情況見下面.
最后還有一種選擇,在js執行引擎的基礎上,自己實現一個輕量級的支持js的無界面瀏覽器.除非你有非常非常非常多需要爬取的內容,效率十分十分十分重要.若你有這個想法,可以看下pyv8,在v8的示例代碼中有一個基于v8實現的簡易瀏覽器模型.是的,只是個模型,并不完全可用,你要自己填充里面的一些方法.實現這些你需要在js引擎(v8),http庫(urllib2)之上實現這些功能,1,當網頁打開時獲取其包含的js代碼,2,構建一個瀏覽器模型,包括各種事件與dom樹.3,執行js.除此之外可能還有其他一些細節.難度較大.
網上可以找到一淘所用購物比價爬蟲的一篇相關ppt.該爬蟲也僅使用的第三種方案.可以看下這篇ppt.該爬蟲大概是用的webkit,scrapy,另外把scrapy的調度隊列改為基于redis的,實現分布式.
如何實現:
回頭談點背景知識,scrapy使用了twisted.一個異步網絡框架.因此要留意潛在的阻塞情況.但注意到settings中有個參數是設置ItemPipeline的并行度.由此推測pipeline不會阻塞,pipeline可能是在線程池中執行的(未驗證).Pipeline一般用于將抓取到的信息保存(寫數據庫,寫文件),因此這里你就不用擔心耗時操作會阻塞整個框架了,也就不用在Pipeline中將這個寫操作實現為異步.
除此之外框架的其他部分.都是異步的,簡單說來就是,爬蟲生成的請求交由調度器去下載,然后爬蟲繼續執行.調度器完成下載后會將響應交由爬蟲解析.
網上找到的參考例子,部分將js支持寫到了DownloaderMiddleware中,scrapy官網的code snippet也是這樣 .若這樣實現,就阻塞了整個框架,爬蟲的工作模式變成了,下載-解析-下載-解析,而不在是并行的下載.在對效率要求不高的小規模爬取中問題不大.
更好的做法是將js支持寫到scrapy的downloader里.網上有一個這樣的實現(使用selenium+phantomjs).不過僅支持get請求.
在適配一個webkit給scrapy的downloader時,有各種細節需要處理.
以上就是scrapy爬蟲如何爬取javascript內容,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。