基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)

基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)

ID:21527841

大?。?5.00 KB

頁(yè)數(shù):4頁(yè)

時(shí)間:2018-10-22

基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)_第1頁(yè)
基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)_第2頁(yè)
基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)_第3頁(yè)
基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)_第4頁(yè)
資源描述:

《基于scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。

1、基于Scrapy框架的分布式網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)  摘要根據(jù)互聯(lián)網(wǎng)實(shí)際情況,提出分布式爬蟲模型,基于Scrapy框架,進(jìn)行代碼實(shí)現(xiàn),且該開(kāi)發(fā)方式可以迅速進(jìn)行對(duì)不同主題的數(shù)據(jù)爬取的移植,滿足不同專業(yè)方向的基于互聯(lián)網(wǎng)大數(shù)據(jù)分析需要?!  娟P(guān)鍵詞】網(wǎng)絡(luò)爬蟲Scrapy-redis分布式  1基本概念  分布式爬蟲:分布式方式是以共同爬取為目標(biāo),形成多爬蟲協(xié)同工作的模式,每個(gè)爬蟲需要獨(dú)立完成單項(xiàng)爬取任務(wù),下載網(wǎng)頁(yè)并保存。  Scrapy-redis:一個(gè)三方的基于redis數(shù)據(jù)庫(kù)實(shí)現(xiàn)的分布式方式,配合scrapy爬蟲框架使用,讓scrapy具有了分布式爬取的功能?! ?分布式爬蟲

2、技術(shù)方案  Scrapy-redis分布式爬蟲的基本設(shè)計(jì)理念為主從模式,由作為主控端負(fù)責(zé)所有網(wǎng)絡(luò)子爬蟲的管理,子爬蟲只需要從主控端那里接收任務(wù),并把新生成任務(wù)提交給主控端,在整個(gè)爬取的過(guò)程中不必與其他爬蟲通信?! ≈饕袔讉€(gè)技術(shù)關(guān)鍵點(diǎn):  2.1子爬蟲爬取任務(wù)的分發(fā)  通過(guò)在主控端安裝一個(gè)redis數(shù)據(jù)庫(kù),維護(hù)統(tǒng)一的任務(wù)列表,子爬蟲每次連接redis庫(kù)調(diào)用lpop()方法,生成一個(gè)任務(wù),并生成一個(gè)request,接下去就是如同一般爬蟲工作?! ?.2用戶登錄  由于網(wǎng)站對(duì)于游客的訪問(wèn)有限制,為了爬取所需信息,必須在程序中實(shí)現(xiàn)用戶登錄,其原理就是能獲取到有效的本地c

3、ookie,并利用該cookie進(jìn)行網(wǎng)站訪問(wèn),除了一般能夠用第三方庫(kù)進(jìn)行圖像識(shí)別的驗(yàn)證方式外,一般采用瀏覽器中手動(dòng)登錄,通過(guò)網(wǎng)絡(luò)工具截取有效的cookie,然后在爬蟲生成request時(shí)附帶上cookie?! ?.3url的去重  scrapy_redis有一個(gè)dupefilter文件中包含RFPDupeFilter類用于過(guò)濾新增的url,可以在該類request_seen中利用redis的key的查找功能,如果所爬取的任務(wù)數(shù)以億計(jì)則建議Bloomfilter去重的方式對(duì)于URL的存儲(chǔ)和操作方式進(jìn)行優(yōu)化,雖然該方式會(huì)造成小于萬(wàn)分之一的過(guò)濾遺失率。  2.4數(shù)據(jù)寫入

4、  選擇非關(guān)系性數(shù)據(jù)庫(kù)MongoDB作為硬盤數(shù)據(jù)庫(kù)與scrapy進(jìn)行搭配使用,在pipeline中對(duì)item數(shù)據(jù)進(jìn)行MongoDB的寫入操作。  3基本實(shí)現(xiàn)步驟  配置:Windows764-bit、Python:2.7.11、Anaconda4.0.0(64-bit)、IDE:Pycharm3.4.1、Scrapy:1.3.2Redis:X64-3.2、MongoDB:3.2.12  代碼實(shí)現(xiàn)需要對(duì)幾個(gè)文件進(jìn)行設(shè)置和編寫:items、settings、spiders、pipelines。  Items:這是一個(gè)爬取數(shù)據(jù)的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)類,由其來(lái)存放爬蟲爬取的鍵值性

5、數(shù)據(jù),關(guān)鍵的就是這條語(yǔ)句:_id=Field()_id表示的生成一個(gè)數(shù)據(jù)對(duì)象,在Items中可以根據(jù)需要設(shè)定多個(gè)數(shù)據(jù)對(duì)象?! ettings:ITEM_PIPELINES該參數(shù)決定了item的處理方法;DOWNLOAD_DELAY這個(gè)是下載的間隔時(shí)間;SCHEDULER指定作為總的任務(wù)協(xié)調(diào)器的類;SCHEDULER_QUEUE_CLASS這個(gè)參數(shù)是設(shè)定處理URL的隊(duì)列的工作模式一共有四種,一般選用SpiderSimpleQueue即可?! piders:該文件就是爬蟲主要功能的實(shí)現(xiàn),首先設(shè)定該爬蟲的基本信息:name、domain、redis_key、star

6、t_urls。爬蟲的第一步都是執(zhí)行方法start_requests,其中核心語(yǔ)句yieldRequest(url,callback)用以根據(jù)url產(chǎn)生一個(gè)request并且將response結(jié)果回傳給callback方法。callback的方法中一般利用xpath或者正?t表達(dá)式對(duì)response中包含的html代碼進(jìn)行解析,產(chǎn)生所需要的數(shù)據(jù)以及新的任務(wù)url。  pipelines:該文件作為數(shù)據(jù)處理、存儲(chǔ)的代碼段,將在items數(shù)據(jù)被創(chuàng)建后被調(diào)用,其中process_item的方法就是被調(diào)用的方法,所以一定要將其重寫,根據(jù)實(shí)際需要把數(shù)據(jù)利用方法dict()轉(zhuǎn)化

7、為字典數(shù)據(jù),最后寫入MongoDB。  完成編寫后,在部署的時(shí)候,start_url的隊(duì)列只能是第一個(gè)運(yùn)行的爬蟲進(jìn)行初始化,后續(xù)運(yùn)行的爬蟲只能是把新的url進(jìn)行寫入不能對(duì)其進(jìn)行再次初始化,部署爬蟲的步驟也很簡(jiǎn)單,只需要把相關(guān)的代碼拷貝到目標(biāo)電腦上,讓后cmd命令進(jìn)入spiders的文件夾,運(yùn)行命令scrapycrawlXXXX,其中XXXX就是爬蟲的名字,就完成了爬蟲的部署和運(yùn)行了。  4結(jié)語(yǔ)  爬蟲的實(shí)現(xiàn),除了基本的步驟和參數(shù)設(shè)置之外,需要開(kāi)發(fā)者根據(jù)實(shí)際網(wǎng)站以及數(shù)據(jù)情況,針對(duì)性的對(duì)爬取的策略、數(shù)據(jù)的去重、數(shù)據(jù)篩選進(jìn)行處理,對(duì)于爬蟲的性能進(jìn)行有效優(yōu)化,為之后的數(shù)據(jù)

8、分析做好良

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。