基于Scrapy框架的分布式網(wǎng)路爬蟲(chóng)實(shí)現
優(yōu)采云 發(fā)布時(shí)間: 2020-05-14 08:09龍源期刊網(wǎng) 基于 Scrapy 框架的分布式網(wǎng)路爬蟲(chóng)實(shí)現 作者:陶興海 來(lái)源:《電子技術(shù)與軟件工程》2017 年第 11 期 摘 要按照互聯(lián)網(wǎng)實(shí)際情況,提出分布式爬蟲(chóng)模型,基于 Scrapy 框架,進(jìn)行代碼實(shí)現,且 該開(kāi)發(fā)方法可以迅速進(jìn)行對不同主題的數據爬取的移植,滿(mǎn)足不同專(zhuān)業(yè)方向的基于互聯(lián)網(wǎng)大數 據剖析須要。 【關(guān)鍵詞】網(wǎng)絡(luò )爬蟲(chóng) Scrapy-redis 分布式 1 基本概念 分布式爬蟲(chóng):分布式方法是以共同爬取為目標,形成多爬蟲(chóng)協(xié)同工作的模式,每個(gè)爬蟲(chóng)需 要獨立完成單項爬取任務(wù),下載網(wǎng)頁(yè)并保存。 Scrapy-redis:一個(gè)三方的基于 redis 數據庫實(shí)現的分布式方法,配合 scrapy 爬蟲(chóng)框架讓 用,讓 scrapy 具有了分布式爬取的功能。 2 分布式爬蟲(chóng)技術(shù)方案 Scrapy-redis 分布式爬蟲(chóng)的基本設計理念為主從模式,由作為主控端負責所有網(wǎng)絡(luò )子爬蟲(chóng) 的管理,子爬蟲(chóng)只須要從主控端那兒接收任務(wù)分布式爬蟲(chóng)框架,并把新生成任務(wù)遞交給主控端,在整個(gè)爬取的 過(guò)程中毋須與其他爬蟲(chóng)通訊。 主要有幾個(gè)技術(shù)關(guān)鍵點(diǎn): 2.1 子爬蟲(chóng)爬取任務(wù)的分發(fā) 通過(guò)在主控端安裝一個(gè) redis 數據庫,維護統一的任務(wù)列表,子爬蟲(chóng)每次聯(lián)接 redis 庫調用 lpop()方法,生成一個(gè)任務(wù),并生成一個(gè) request,接下去就是就像通常爬蟲(chóng)工作。
2.2 用戶(hù)登入 由于網(wǎng)站對于旅客的訪(fǎng)問(wèn)有限制,為了爬取所需信息,必須在程序中實(shí)現用戶(hù)登陸,其原 理就是能獲取到有效的本地 cookie,并借助該 cookie 進(jìn)行網(wǎng)站訪(fǎng)問(wèn),除了通常還能用第三方庫 進(jìn)行圖象辨識的驗證方法外,一般采用瀏覽器中自動(dòng)登入,通過(guò)網(wǎng)路工具截取有效的 cookie, 然后在爬蟲(chóng)生成 request 時(shí)附送上 cookie。 2.3 url 的去重 龍源期刊網(wǎng) scrapy_redis 有一個(gè) dupefilter 文件中包含 RFPDupeFilter 類(lèi)用于過(guò)濾新增的 url,可以在該 類(lèi) request_seen 中借助 redis 的 key 的查找功能,如果所爬取的任務(wù)數以?xún)|計則建議 Bloomfilter 去重的方法對于 URL 的儲存和操作方法進(jìn)行優(yōu)化,雖然該方法會(huì )導致大于萬(wàn)分之一的過(guò)濾遺 失率。 2.4 數據寫(xiě)入 選擇非關(guān)系性數據庫 MongoDB 作為硬碟數據庫與 scrapy 進(jìn)行搭配使用,在 pipeline 中對 item 數據進(jìn)行 MongoDB 的寫(xiě)入操作。 3 基本實(shí)現步驟 配置:Windows7 64-bit、Python:2.7.11、 Anaconda 4.0.0 (64-bit)、IDE:Pycharm 3.4.1、Scrapy:1.3.2Redis:X64-3.2、MongoDB:3.2.12 代碼實(shí)現須要對幾個(gè)文件進(jìn)行設置和編撰:items、settings、spiders、pipelines。
Items:這是一個(gè)爬取數據的基礎數據結構類(lèi),由其來(lái)儲存爬蟲(chóng)爬取的鍵值性數據,關(guān)鍵 的就是這條句子:_id = Field() _id 表示的生成一個(gè)數據對象,在 Items 中可以按照須要設定 多個(gè)數據對象。 Settings:ITEM_PIPELINES 該參數決定了 item 的處理方式;DOWNLOAD_DELAY 這個(gè) 是下載的間隔時(shí)間;SCHEDULER 指定作為總的任務(wù)協(xié)調器的類(lèi); SCHEDULER_QUEUE_CLASS 這個(gè)參數是設定處理 URL 的隊列的工作模式一共有四種,一般 選用 SpiderSimpleQueue 即可。 spiders:該文件就是爬蟲(chóng)主要功能的實(shí)現,首先設定該爬蟲(chóng)的基本信息:name、domain、 redis_key、start_urls。爬蟲(chóng)的第一步都是執行方式 start_requests,其中核心句子 yield Request (url,callback)用以按照 url 產(chǎn)生一個(gè) request 并且將 response 結果回傳給 callback 方法。 callback 的方式中通常借助 xpath 或者正則表達式對 response 中包含的 html 代碼進(jìn)行解析,產(chǎn) 生所須要的數據以及新的任務(wù) url。
pipelines:該文件作為數據處理、存儲的代碼段分布式爬蟲(chóng)框架,將在 items 數據被創(chuàng )建后被調用,其中 process_item 的方式就是被調用的方式,所以一定要將其重畫(huà),根據實(shí)際須要把數據借助方式 dict()轉化為字典數據,最后寫(xiě)入 MongoDB。 完成編撰后,在布署的時(shí)侯,start_url 的隊列只能是第一個(gè)運行的爬蟲(chóng)進(jìn)行初始化,后續 運行的爬蟲(chóng)只能是把新的 url 進(jìn)行寫(xiě)入不能對其進(jìn)行再度初始化,部署爬蟲(chóng)的步驟也很簡(jiǎn)單, 只須要把相關(guān)的代碼拷貝到目標筆記本上,讓后 cmd 命令步入 spiders 的文件夾,運行命令 scrapy crawl XXXX,其中 XXXX 就是爬蟲(chóng)的名子,就完成了爬蟲(chóng)的布署和運行了。 龍源期刊網(wǎng) 4 結語(yǔ) 爬蟲(chóng)的實(shí)現,除了基本的步驟和參數設置之外,需要開(kāi)發(fā)者按照實(shí)際網(wǎng)站以及數據情況, 針對性的對爬取的策略、數據的去重、數據篩選進(jìn)行處理,對于爬蟲(chóng)的性能進(jìn)行有效優(yōu)化,為 之后的數據剖析做好良好的數據打算。同時(shí),根據須要可以考慮時(shí)間的誘因加入到數據結構 中,這就要求爬蟲(chóng)還能通過(guò)數據的時(shí)間去進(jìn)行增量爬取。 參考文獻 [1]使用 redis 如何實(shí)現一個(gè)網(wǎng)絡(luò )分布式爬蟲(chóng)[OL].http: //www.oschina.net/code/snippet_209440_20495/. [2]scrapy_redis 的使用解讀[OL].http://www.cnblogs.com/kylinlin/p/5198233.html.http: //blog.csdn.net/u012150179/art


