Scrapy001-框架初窺

Scrapy001-框架初窺

@(Spider)[POSTS]html

1.Scrapy簡介

Scrapy是一個應用於抓取、提取、處理、存儲等網站數據的框架(相似Django)。shell

應用:後端

  • 數據挖掘
  • 信息處理
  • 存儲歷史數據
  • 監測
  • 自動化測試
  • 。。。

還有不少,詳細參考:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/overview.html緩存

2.Scrapy架構

Scrapy使用了Twisted異步網絡庫來處理網絡通信。結構以下:cookie

Scrapy

Scrapy的核心組件:網絡

  • 引擎(Scrapy Engine
    用來處理整個系統的數據流,觸發事務(框架核心),負責控制和調度各個組件session

  • 調度器(Scheduler
    用來接受引擎發過來的請求,壓入隊列中,並在引擎再次請求的時候返回,如:要抓取的連接(URL)的優先隊列,由它來決定下一個要抓取的URL是什麼,並進行去重。架構

  • 下載器(Downloader
    用於下載網頁內容,並將網頁內容返回給Spiders(本身編寫的蟲子)--下載器創建在Twisted模型上框架

  • 爬蟲(Spider
    幹活的蟲子,從特定的網頁中提取本身須要的信息,即:實體Item,用戶也能夠提取下級連接,繼續抓取頁面內容。異步

  • 項目管道(Pipline
    負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體(Item)、驗證明體的有效性、清除垃圾信息。當頁面被爬蟲解析後,解析後內容將會發送到項目管理通道,通過幾個特定的次序處理。

  • 下載器中間件(Downloader Middlewares
    位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎和下載器之間的請求與響應。

  • 爬蟲中間件(Spider Middlewares
    介於Scrapy引擎和Spider之間的框架,處理爬蟲的響應輸入和請求輸出。

  • 調度中間件(Scheduler Middlewares)
    介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

從上面能夠看出,Scrapy的耦合性很低,擴展性更靈活,自定義性好

3.Scrapy執行流程

以下圖:

此圖來自大神的文章

按照上圖的序號,數據的執行流程以下:

  1. 引擎自定義爬蟲中獲取初始化請求(種子URL--自定義爬蟲文件中的start_urls
  2. 引擎將該請求放入調度器中,同時引擎從調度器獲取一個待下載的請求(兩者異步執行)
  3. 調度器返回給引擎一個待下載請求
  4. 引擎將待下載請求發送給下載器,中間會通過一系列下載器中間件
  5. 待下載請求通過下載器處理以後,會生成一個響應對象(response),返回給引擎,中間會再次通過一系列下載器中間件
  6. 引擎接收到下載器返回的響應對象(response)後,將其發送給自定義爬蟲,執行自定義邏輯,中間會通過一系列爬蟲中間件
  7. 響應對象(response)通過內部的選擇器篩選並調用回調函數處理後,完成邏輯,生成結果對象新的請求對象給引擎,再次通過一系列爬蟲中間件
  8. 引擎將返回的結果對象交給結果處理器處理,將新的請求對象交給調度器
  9. 新的請求對象重複上述過程,直到沒有新的請求處理

新的請求對象:多層URL的篩選中的下一層URL

==> 詳細組件關係,待解讀完源碼後繼續跟上。

4.支持特性

上面介紹的僅僅是冰上一角,Scrapy提供了不少強大的特性是爬蟲更加高效,例如:

  • HTML, XML源數據 選擇及提取 的內置支持
  • 提供了一系列在spider之間共享的可複用的過濾器(即 Item Loaders),對智能處理爬取數據提供了內置支持。
  • 經過 feed導出 提供了多格式(JSON、CSV、XML),多存儲後端(FTP、S三、本地文件系統)的內置支持
  • 提供了media pipeline,能夠 自動下載 爬取到的數據中的圖片(或者其餘資源)。
  • 高擴展性。您能夠經過使用 signals ,設計好的API(中間件, extensions, pipelines)來定製實現您的功能。
  • 內置的中間件及擴展爲下列功能提供了支持:
  1. cookies and session 處理
  2. HTTP 壓縮
  3. HTTP 認證
  4. HTTP 緩存
  5. user-agent模擬
  6. robots.txt
  7. 爬取深度限制
  8. 其餘
  • 針對非英語語系中不標準或者錯誤的編碼聲明, 提供了自動檢測以及健壯的編碼支持。
  • 支持根據模板生成爬蟲。在加速爬蟲建立的同時,保持在大型項目中的代碼更爲一致。詳細內容請參閱 genspider 命令。
    針對多爬蟲下性能評估、失敗檢測,提供了可擴展的 狀態收集工具 。
  • 提供 交互式shell終端 , 爲您測試XPath表達式,編寫和調試爬蟲提供了極大的方便
  • 提供 System service, 簡化在生產環境的部署及運行
  • 內置 Web service, 使您能夠監視及控制您的機器
  • 內置 Telnet終端 ,經過在Scrapy進程中鉤入Python終端,使您能夠查看而且調試爬蟲
  • Logging 爲您在爬取過程當中捕捉錯誤提供了方便
  • 支持 Sitemaps 爬取
  • 具備緩存的DNS解析器
相關文章
相關標籤/搜索