scrapy爬蟲(chóng)如何爬取javascript內(nèi)容-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、荊州網(wǎng)絡(luò)推廣、微信小程序、荊州網(wǎng)絡(luò)營(yíng)銷(xiāo)、荊州企業(yè)策劃、荊州品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供荊州建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn

本篇文章給大家分享的是有關(guān)scrapy爬蟲(chóng)如何爬取javascript內(nèi)容,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

很多網(wǎng)站都使用javascript...網(wǎng)頁(yè)內(nèi)容由js動(dòng)態(tài)生成,一些js事件觸發(fā)的頁(yè)面內(nèi)容變化,鏈接打開(kāi).甚至有些網(wǎng)站在沒(méi)有js的情況下根本不工作,取而代之返回你一條類(lèi)似"請(qǐng)打開(kāi)瀏覽器js"之類(lèi)的內(nèi)容.

對(duì)javascript的支持有四種解決方案:
1,寫(xiě)代碼模擬相關(guān)js邏輯.
2,調(diào)用一個(gè)有界面的瀏覽器,類(lèi)似各種廣泛用于測(cè)試的,selenium這類(lèi).
3,使用一個(gè)無(wú)界面的瀏覽器,各種基于webkit的,casperjs,phantomjs等等.
4,結(jié)合一個(gè)js執(zhí)行引擎,自己實(shí)現(xiàn)一個(gè)輕量級(jí)的瀏覽器.難度很大.

對(duì)于簡(jiǎn)單的有限爬取任務(wù),若可以通過(guò)代碼模擬js邏輯,選這種方案,例如,在duckduckgo搜索引擎中,翻頁(yè)這個(gè)動(dòng)作是靠js觸發(fā)的.模擬似乎還是很難,然后我注意到他頁(yè)面的第二個(gè)form,似乎submit后就可以翻頁(yè),試了一下果然如此.
在寫(xiě)代碼模擬相關(guān)js邏輯時(shí),首先試下關(guān)閉瀏覽器的js,看下是否能獲取到需要的東西.有些頁(yè)面提供了沒(méi)有js的兼容.不行再開(kāi)chrome的控制臺(tái)或firebug觀察js邏輯,可能是ajax這類(lèi)收發(fā)包.用urllib2(推薦requests庫(kù))模擬即可,也可能是修改dom之類(lèi),用lxml這類(lèi)對(duì)應(yīng)修改即可.說(shuō)來(lái)就是js執(zhí)行了什么,就用python代碼對(duì)應(yīng)模擬執(zhí)行.

也可選擇使用selenium這類(lèi),缺點(diǎn)是效率很低,你應(yīng)當(dāng)先測(cè)試一下selenium啟動(dòng)一個(gè)瀏覽器實(shí)例所需時(shí)間你是否可接受.這個(gè)時(shí)間一般在秒級(jí)別.再考慮到瀏覽器打開(kāi)頁(yè)面渲染,就更慢了.在效率可接受的前提下,這個(gè)方案也不錯(cuò).
這個(gè)方案的另一個(gè)問(wèn)題是在沒(méi)有桌面環(huán)境的服務(wù)器上,selenium目測(cè)無(wú)法運(yùn)行.

對(duì)規(guī)模不小,模擬js不可行,selenium效率太低,或需要在無(wú)桌面環(huán)境上執(zhí)行的情況.有無(wú)界面瀏覽器,幾個(gè)無(wú)界面瀏覽器大體情況如下:
1,casperjs,phantomjs:非py,可以通過(guò)命令行調(diào)用,功能基本滿足,推薦先看下這兩個(gè)是否滿足.比較成熟.phantomjs還有一個(gè)非官方的webdriver協(xié)議實(shí)現(xiàn),由此可通過(guò)selenium調(diào)phantomjs實(shí)現(xiàn)無(wú)界面.
2,ghost,spynner等:py定制的webkit,個(gè)人覺(jué)得spynner代碼亂,ghost代碼質(zhì)量不錯(cuò).但有bug.我看過(guò)幾個(gè)這類(lèi)庫(kù)后自己改了一個(gè).
這種方案的詳細(xì)情況見(jiàn)下面.

最后還有一種選擇,在js執(zhí)行引擎的基礎(chǔ)上,自己實(shí)現(xiàn)一個(gè)輕量級(jí)的支持js的無(wú)界面瀏覽器.除非你有非常非常非常多需要爬取的內(nèi)容,效率十分十分十分重要.若你有這個(gè)想法,可以看下pyv8,在v8的示例代碼中有一個(gè)基于v8實(shí)現(xiàn)的簡(jiǎn)易瀏覽器模型.是的,只是個(gè)模型,并不完全可用,你要自己填充里面的一些方法.實(shí)現(xiàn)這些你需要在js引擎(v8),http庫(kù)(urllib2)之上實(shí)現(xiàn)這些功能,1,當(dāng)網(wǎng)頁(yè)打開(kāi)時(shí)獲取其包含的js代碼,2,構(gòu)建一個(gè)瀏覽器模型,包括各種事件與dom樹(shù).3,執(zhí)行js.除此之外可能還有其他一些細(xì)節(jié).難度較大.
網(wǎng)上可以找到一淘所用購(gòu)物比價(jià)爬蟲(chóng)的一篇相關(guān)ppt.該爬蟲(chóng)也僅使用的第三種方案.可以看下這篇ppt.該爬蟲(chóng)大概是用的webkit,scrapy,另外把scrapy的調(diào)度隊(duì)列改為基于redis的,實(shí)現(xiàn)分布式.

如何實(shí)現(xiàn):

回頭談點(diǎn)背景知識(shí),scrapy使用了twisted.一個(gè)異步網(wǎng)絡(luò)框架.因此要留意潛在的阻塞情況.但注意到settings中有個(gè)參數(shù)是設(shè)置ItemPipeline的并行度.由此推測(cè)pipeline不會(huì)阻塞,pipeline可能是在線程池中執(zhí)行的(未驗(yàn)證).Pipeline一般用于將抓取到的信息保存(寫(xiě)數(shù)據(jù)庫(kù),寫(xiě)文件),因此這里你就不用擔(dān)心耗時(shí)操作會(huì)阻塞整個(gè)框架了,也就不用在Pipeline中將這個(gè)寫(xiě)操作實(shí)現(xiàn)為異步.
除此之外框架的其他部分.都是異步的,簡(jiǎn)單說(shuō)來(lái)就是,爬蟲(chóng)生成的請(qǐng)求交由調(diào)度器去下載,然后爬蟲(chóng)繼續(xù)執(zhí)行.調(diào)度器完成下載后會(huì)將響應(yīng)交由爬蟲(chóng)解析.

網(wǎng)上找到的參考例子,部分將js支持寫(xiě)到了DownloaderMiddleware中,scrapy官網(wǎng)的code snippet也是這樣 .若這樣實(shí)現(xiàn),就阻塞了整個(gè)框架,爬蟲(chóng)的工作模式變成了,下載-解析-下載-解析,而不在是并行的下載.在對(duì)效率要求不高的小規(guī)模爬取中問(wèn)題不大.
更好的做法是將js支持寫(xiě)到scrapy的downloader里.網(wǎng)上有一個(gè)這樣的實(shí)現(xiàn)(使用selenium+phantomjs).不過(guò)僅支持get請(qǐng)求.

在適配一個(gè)webkit給scrapy的downloader時(shí),有各種細(xì)節(jié)需要處理.

以上就是scrapy爬蟲(chóng)如何爬取javascript內(nèi)容,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

文章名稱(chēng):scrapy爬蟲(chóng)如何爬取javascript內(nèi)容-創(chuàng)新互聯(lián)
鏈接地址:http://muchs.cn/article26/dejpjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)