爬蟲之scrapy核心組件

Scrapy一個開源和協做的框架,其最初是爲了頁面抓取 (更確切來講, 網絡抓取 )所設計的,使用它能夠以快速、簡單、可擴展的方式從網站中提取所需的數據。但目前Scrapy的用途十分普遍,可用於如數據挖掘、監測和自動化測試等領域,也能夠應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。python

Scrapy 是基於twisted框架開發而來,twisted是一個流行的事件驅動的python網絡框架。所以Scrapy使用了一種非阻塞(又名異步)的代碼來實現併發。總體架構大體以下
web

Components:數據庫

    1. 引擎(EGINE)

      引擎負責控制系統全部組件之間的數據流,並在某些動做發生時觸發事件。有關詳細信息,請參見上面的數據流部分。網絡

    2. 調度器(SCHEDULER)
      用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 能夠想像成一個URL的優先級隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重複的網址
    3. 下載器(DOWLOADER)
      用於下載網頁內容, 並將網頁內容返回給EGINE,下載器是創建在twisted這個高效的異步模型上的
    4. 爬蟲(SPIDERS)
      SPIDERS是開發人員自定義的類,用來解析responses,而且提取items,或者發送新的請求
    5. 項目管道(ITEM PIPLINES)
      在items被提取後負責處理它們,主要包括清理、驗證、持久化(好比存到數據庫)等操做
    6. 下載器中間件(Downloader Middlewares)
      位於Scrapy引擎和下載器之間,主要用來處理從EGINE傳到DOWLOADER的請求request,已經從DOWNLOADER傳到EGINE的響應response,你可用該中間件作如下幾件事
      1. process a request just before it is sent to the Downloader (i.e. right before Scrapy sends the request to the website);
      2. change received response before passing it to a spider;
      3. send a new Request instead of passing received response to a spider;
      4. pass response to a spider without fetching a web page;
      5. silently drop some requests.
    7. 爬蟲中間件(Spider Middlewares)位於EGINE和SPIDERS之間,主要工做是處理SPIDERS的輸入(即responses)和輸出(即requests)
相關文章
相關標籤/搜索