scrapy-redis源碼分析

來源:互聯網
上載者:User

標籤:scrapy   scrapy-redis   源碼   分析   

原創文章,連結:http://blog.csdn.net/u012150179/article/details/38226253

  +  

(I) connection.py負責根據setting中配置執行個體化redis串連。被dupefilter和scheduler調用,總之涉及到redis存取的都要使用到這個模組。

(II) dupefilter.py負責執行requst的去重,實現的很有技巧性,使用redis的set資料結構。但是注意scheduler並不使用其中用於在這個模組中實現的dupefilter鍵做request的調度,而是使用queue.py模組中實現的queue。
當request不重複時,將其存入到queue中,調度時將其彈出。

(III)queue.py其作用如II所述,但是這裡實現了三種方式的queue:
FIFO的SpiderQueue,SpiderPriorityQueue,以及LIFI的SpiderStack。預設使用的是第二中,這也就是出現之前文章中所分析情況的原因(連結:)。

(IV)pipelines.py這是是用來實現分散式處理的作用。它將Item儲存在redis中以實現分散式處理。
另外可以發現,同樣是編寫pipelines,在這裡的編碼實現不同於文章(連結:)中所分析的情況,由於在這裡需要讀取配置,所以就用到了from_crawler()函數。

(V)scheduler.py此擴充是對scrapy中內建的scheduler的替代(在settings的SCHEDULER變數中指出),正是利用此擴充實現crawler的分布式調度。其利用的資料結構來自於queue中實現的資料結構。

scrapy-redis所實現的兩種分布式:爬蟲分布式以及item處理分布式就是由模組scheduler和模組pipelines實現。上述其它模組作為為二者輔助的功能模組。

(VI)spider.py設計的這個spider從redis中讀取要爬的url,然後執行爬取,若爬取過程中返回更多的url,那麼繼續進行直至所有的request完成。之後繼續從redis中讀取url,迴圈這個過程。

分析:在這個spider中通過connect signals.spider_idle訊號實現對crawler狀態的監視。當idle時,返回新的make_requests_from_url(url)給引擎,進而交給調度器調度。


關於代碼中的注釋,可以查看:https://github.com/younghz/scrapy-redis

原創文章,連結:http://blog.csdn.net/u012150179/article/details/38226253

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.