天天看點

Python爬蟲學習記錄——9.爬蟲工程化及Scrapy架構初窺

文章目錄

  • ​​Python适合做爬蟲的原因​​
  • ​​爬蟲的知識體系​​
  • ​​Scrapy架構簡介​​
  • ​​Scrapy的工作流程​​

Python适合做爬蟲的原因

  • 語言本身簡單,适合靈活開發
  • 有比較完善的工具鍊
  • 足夠靈活,以應對各種突然狀況

爬蟲的知識體系

  • 前端相關知識:html,css,js;浏覽器相關知識;
  • 各種資料庫的運用;
  • http協定的了解;
  • 對于前背景關聯的方案;

Scrapy架構簡介

什麼是Scrapy架構?

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用架構。 可以應用在包括資料挖掘,資訊處理或存儲曆史資料等一系列的程式中。

其最初是為了頁面抓取 (更确切來說, 網絡抓取 )所設計的, 也可以應用在擷取API所傳回的資料(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。

使用Scrapy架構爬取資料與使用Requests+Xpath爬取資料,差別是什麼?

  1. 入門requests+Xpath相對來說更加簡單,更能摸清爬蟲每個詳細的步驟。當你隻是簡單的爬取小量的網頁(幾千頁),而不喜歡配置Scrapy架構繁重的設定,那requests+Xpath是不可多得的利器
  2. requests+Xpath能夠實作的功能,scrapy也能便捷地實作。scrapy是一個功能非常強大的爬蟲架構,它不僅能便捷地建構request,還有強大的selector能夠友善地解析response
  3. 然而最受歡迎的還是Scrapy的性能,即抓取和解析的速度。它的downloader是多線程的,request是異步排程和處理的。這兩點使它的爬取速度非常之快。另外還有内置的logging,exception,shell等子產品,為爬取工作帶來了很多便利,使你的爬蟲标準化和工程化。

Scrapy的元件

  • 引擎(Engine):用來處理整個系統的資料流,觸發事務(架構核心)
  • 排程器(Scheduler):用來接受引擎發過來的請求,壓入隊列中,并在引擎再次請求的時候傳回。可以想像成一個URL(抓取網頁的網址或者說是連結)的優先隊列,由它來決定下一個要抓取的網址是什麼,同時去除重複的網址
  • 下載下傳器(Downloader):用于下載下傳網頁内容,并将網頁内容傳回給引擎(Scrapy下載下傳器是建立在twisted這個高效的異步模型上的)
  • 爬蟲(Spiders):爬蟲是主要幹活的,用于從特定的網頁中提取自己需要的資訊,即所謂的實體(Item)。也可以從中提取對外連結接,讓Scrapy繼續抓取下一個頁面
  • 項目管道(Item Pipelines):負責處理爬蟲從網頁中抽取的(Item),主要的功能是持久化實體、驗證明體的有效性、清除不需要的資訊。當頁面被爬蟲解析後,将被發送到項目管道,并經過幾個特定的次序處理資料,并儲存資料
  • 下載下傳器中間件(Downloader Middlewares):位于Scrapy引擎和下載下傳器之間的架構,主要是處理Scrapy引擎與下載下傳器之間的請求及響應,是進行反反爬工作的重點
  • 爬蟲中間件(Spider Middlewares):介于Scrapy引擎和爬蟲之間的架構,主要工作是處理蜘蛛的響應輸入和請求輸出

Scrapy的工作流程

Python爬蟲學習記錄——9.爬蟲工程化及Scrapy架構初窺
  1. Spiders發送第一個URL給引擎
  2. 引擎從Spider中擷取到第一個要爬取的URL後,在排程器(Scheduler)以Request排程
  3. 排程器把需要爬取的request傳回給引擎
  4. 引擎将request通過下載下傳中間件發給下載下傳器(Downloader)去網際網路下載下傳資料
  5. 一旦資料下載下傳完畢,下載下傳器擷取由網際網路伺服器發回來的Response,并将其通過下載下傳中間件發送給引擎
  6. 引擎從下載下傳器中接收到Response并通過Spider中間件發送給Spider處理
  7. pider處理Response并從中傳回比對到的Item及(跟進的)新的Request給引擎
  8. 引擎将(Spider傳回的)爬取到的Item給Item Pipeline做資料處理或者入庫儲存,将(Spider傳回的)Request給排程器入隊列
  9. (從第三步)重複直到排程器中沒有更多的request