分佈式爬蟲與增量式爬蟲

首先要說一下scrapy-redis

  配置文件settings主要配置Scrapy_Redis的功能,其中配置SCHEDULER是改變Scrapy原有的調度器。當項目運行的時候,Scrapy從配置文件中讀取配置信息,根據配置信息運行Scrapy_Redis的功能,使得整個項目的調度器Scheduler和Spider都是Scrapy_Redis定義的,從而實現了分佈式爬蟲

 

從Scrapy_Redis的分佈式爬蟲原理得知,當前請求的URL地址和響應內容都已經保存在Redis數據庫的時候,Scrapy不再對當前請求發送HTTP請求,而是直接執行下面一條請求,這樣可以防止分佈式的爬蟲程序重複爬取,從而保證了數據的唯一性

  根據分佈式爬蟲的原理可以衍生出一種新的使用方式--增量式爬蟲。增量式爬蟲是在已經保存網站部分數據的情況下,當再次運行爬蟲的時候,它不會對應有的數據重複爬取,只爬取數據庫中尚未保存的數據,分佈式爬蟲Scrapy_Redis也可以作爲增量式爬蟲,此外還可以在Scrapy項目裏自主開發增量式爬蟲,,實現的方式和Scrapy_Redis的大差不差

  自主開發增量式爬蟲的兩種方式:基於管道實現增量式爬蟲和中間件實現增量式。兩個在Scrapy的不同文件中實現

 

  基於管道實現增量式爬蟲是在pipelineswenjian的process_ite()方法內判斷數據是否已經保存在redis數據庫中,如果存在則不做數據庫入庫處理,反之就將當前數據寫入到Redis數據庫和目標數據庫中

  基於中間件實現增量式爬蟲,是在middlewares文件中定義中間件,判斷當前請求的URL地址是否已經存在在Redis數據庫中,如果存在就跳過當前請求並且直接執行下一個請求,反之就講當前的URL地址寫入Redis數據庫並對該請求向下執行

 

 

基於管道實現增量式爬蟲

 

  基於管道實現是將Scrapy_Redis的pipelines單獨使用,它最大的有點是對以訪問的URL地址重複訪問並且獲得數據,這樣可以及時更新數據的動態變化

  應用場景:

    排行榜、論壇貼吧等網站的爬取;

  缺點:

    它會對URL地址重複的訪問,如果網站數據固定不變就會造成網絡資源的浪費,同時也增大了反爬蟲機制檢測的風險

  實現管道增量式爬蟲可以使用Scrapy_Redis的pipelines文件的RedisPipeline類,不過他會涉及到Scrapy_Redis其他文件的使用。爲了簡化功能的複雜度,可以根據原理在項目的pipelines文件編寫相對應的功能就可以了,

 

 

基於中間件實現增量式爬蟲

 

  基於中間件實現增量式爬蟲是在發送HTTP請求之前,首先要對該請求的URL地址進行判斷,如果該URL地址在此之前已經發送過HTTP請求,則本次請求將不再往下執行了,這樣可以避免同一個URL地址的重複訪問。因此自定義中間件主要對當前請求的URL地址進行判斷,根據不同的判斷結果執行不同的處理方式

 

 

 

總結

  基於管道實現增量式爬蟲是在pipelines文件的process_item()方法裏判斷數據是否保存在Redis數據庫,如果存在則不需要做數據庫入庫處理,反之就需要將當前數據寫入Redis數據庫和目標數據庫

  基於中間件實現的增量式爬蟲是在middlewares文件裏定義中間件,判斷當前請求的URL地址是否已經存在於Redis數據庫中,如果存在則跳過當前請求並直接執行下一個請求,反之就需要將當前的URL地址寫入到Redis數據庫並對該請求向下執行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章