Scrapy爬蟲框架(一)原理介紹

Scrapy爬蟲原理:

 

 

 

架構分爲如下幾個部分:

  • Scrapy Engine:引擎負責控制數據流在系統中所有組件中流動,並在相應動作發生時觸發事件,此組件相當於爬蟲的“大腦”,是整個爬蟲的調度中心。
  • 調度器(Scheduler):調度器從引擎接受request並將他們入隊,以便之後引擎請求他們時提供給引擎。
    初始的爬取URL和後續在頁面中獲取的待爬取的URL將放入調度器中,等待爬取。同時調度器會自動去除重複的URL(如果特定的URL不需要去重也可以通過設置實現,如post請求的URL)
  • 下載器(Downloader):下載器負責獲取頁面數據並提供給引擎,而後提供給spider。
  • Spiders: Spider是Scrapy用戶編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。 每個spider負責處理一個特定(或一些)網站。
  • Item Pipeline: Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存取到數據庫中)。
  • 下載器中間件(Downloader middlewares): 下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能
    通過設置下載器中間件可以實現爬蟲自動更換user-agent、IP等功能。
  • Spider中間件(Spider middlewares): Spider中間件是在引擎及Spider之間的特定鉤子(specific
    hook),處理spider的輸入(response)和輸出(items及requests)。
    其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。

 

那麼scrapy爬蟲工作的數據流是什麼樣的?

1.引擎打開一個網站(open a domain),找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。

2.引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。

3.引擎向調度器請求下一個要爬取的URL。

4.調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。

5.一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。

6.引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。

7.Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。

8.引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。

(從第二步)重複直到調度器中沒有更多地request,引擎關閉該網站。

大白話理解scrapy框架:

scrapy框架開啓,引擎打開網站,找到該網站對應的spider,把spider要請求的第一個鏈接url,給調度器(Scheduler),request請求,並轉發給下載器(Downloader),下載器把網頁信息下載生成response,返回給引擎,引擎將接收的response,傳遞給spider

spider對返回的response,進行抓取,把數據item傳遞給引擎,引擎再把item,傳遞給Item Pipeline,把新的spider 的請求,返回給調度器。依次循環,直至引擎沒有新的request請求給調度器,程序結束

 

項目文件結構:

scrapyspider/
    scrapy.cfg
    scrapyspider/
        __init__.py
        items.py
        pipelines.py
        middlewares.py
        settings.py
        spiders/
            __init__.py
            ...

這些文件分別是:

scrapy.cfg: 項目的配置文件。
scrapyspider/: 該項目的python模塊。之後您將在此加入代碼。
scrapyspider/items.py: 項目中的item文件。
scrapyspider/pipelines.py: 項目中的pipelines文件。

scrapyspider/middlewares.py: 定義downloader中間件和spider 中間件。
scrapyspider/settings.py: 項目的設置文件。
scrapyspider/spiders/: 放置spider代碼的目錄。

 

 

 

 

 

 

 

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