scrapy架構圖與執行流程


概覽

本文描述了Scrapy的架構圖、數據流動、以及個組件的相互作用

架構圖與數據流

上圖中各個數字與箭頭代表數據的流動方向和流動順序,具體執行流程如下:

  0. Scrapy將會實例化一個Crawler對象,在Crawler中:

    創建spider對象----_create_spider

    創建engine對象----_create_engine

    通過engine對象打開spider並生成第一個request---- yield self.engine.open_spider(self.spider, start_requests) 

      實例化調度器對象----Scheduler

    啟動引擎---- yield defer.maybeDeferred(self.engine.start) 

  1. 引擎從Spider獲取初始請求

    ----_next_request

    ----_next_request_from_scheduler

  2. 引擎把初始請求給調度器,並向調度器詢問下一次請求

    ----scheduler.next_request

  3. 調度器會對url進行指紋去重,如果是未爬取過的url,就把它放到隊列中等待,並把下一個request返回給引擎

    把url放入到隊列中----enqueue_request

    返回下一個request----next_request

  4. 引擎把從調度器返回的request途徑下載中間件交給下載器

    ----download

  5. 一旦頁面完成下載,下載器將會生成一個響應,途徑下載中間件,再把它交給引擎

    ----download

  6. 引擎接收到響應,並把它途徑爬蟲中間件,再交給spider

    ----_handle_downloader_output

  7. spdier接收到響應,並對它進行解析,解析出Items或者新的Request,再把它們途徑爬蟲中間件,提交給引擎

    ----parse

  8. 引擎把接收到的items提交給Item Pipeline,把接收到的Request提交給調度器

  9. 從步驟1開始重復該過程,直到不在有request

各組件介紹

ENGINE

引擎(engine)控制所有部件間的數據流,並在某些事件發生時觸發事件

Scheduler

調度器(scheduler)接收來自引擎的request,並對它去重,放入到請隊列中;並根據隊列的取出規則,把請求按順序返回給引擎

Downloader

下載器(Downloader)獲取網頁數據並返回給引擎

Spiders

爬蟲(Spiders)用來解析response,提取出Items和新的Requests

Item Pipeline

對Items進行進一步的清洗,並持久化

Downloader middlewares

下載中間件可以勾住下載器和引擎之間的數據流,並對它們做一些處理,比如:

  • 在request送到下載器之前對它做一些處理,可以添加User_Agent,修改IP等
  • 對response做一些處理

Spider middlewares

爬蟲中間件可以勾住爬蟲和引擎之間的數據流,並對它們做一些處理

 

 

 

 
        

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM