1. 程式人生 > >爬蟲之scrapy工作流程

爬蟲之scrapy工作流程

mpi 靈活 響應 取數 速度 不用 提取 包括 agen

Scrapy是什麽?

scrapy 是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,我們只需要實現少量代碼,就能夠快速的抓取到數據內容。Scrapy 使用了 Twisted[‘tw?st?d](其主要對手是Tornado)異步網絡框架來處理網絡通訊,可以加快我們的下載速度,不用自己去實現異步框架,並且包含了各種中間件接口,可以靈活的完成各種需求。

異步與非阻塞的區別:異步:調用在發出之後,這個調用就直接返回,不管有無結果。

非阻塞:關註的是程序在等待調用結果(消息,返回值)時的狀態,指在不能立刻得到結果之前,該調用不會阻塞當前線程。

技術分享圖片

技術分享圖片

scrapy詳細工作流程:
  1.首先Spiders(爬蟲)將需要發送請求的url(requests)經ScrapyEngine(引擎)交給Scheduler(調度器)。

  2.Scheduler(排序,入隊)處理後,經ScrapyEngine,DownloaderMiddlewares(可選,主要有User_Agent, Proxy代理)交給Downloader。

  3.Downloader向互聯網發送請求,並接收下載響應(response)。將響應(response)經ScrapyEngine,SpiderMiddlewares(可選)交給Spiders。     

  4.Spiders處理response,提取數據並將數據經ScrapyEngine交給ItemPipeline保存(可以是本地,可以是數據庫)。

  5.提取url重新經ScrapyEngine交給Scheduler進行下一個循環。直到無Url請求程序停止結束。

Scrapy主要包括了以下組件:

  1. 引擎(Scrapy): 用來處理整個系統的數據流處理, 觸發事務(框架核心)
  2. 調度器(Scheduler): 用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什麽, 同時去除重復的網址
  3. 下載器(Downloader): 用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)
  4. 爬蟲(Spiders): 爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
  5. 項目管道(Pipeline): 負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析後,將被發送到項目管道,並經過幾個特定的次序處理數據。
  6. 下載器中間件(Downloader Middlewares): 位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
  7. 爬蟲中間件(Spider Middlewares): 介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
  8. 調度中間件(Scheduler Middewares): 介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

爬蟲之scrapy工作流程