2017-07-29 17:50:29
Scrapy是一個快速功能強大的網絡爬蟲架構。
Scrapy不是一個函數功能庫,而是一個爬蟲架構。爬蟲架構是實作爬蟲功能的一個軟體結構和功能元件集合。爬蟲架構是一個半成品,能夠幫助使用者實作專業網絡爬蟲。
一、Scrapy架構介紹
5+2結構,5個主要子產品加2個中間件。
(1)Engine:控制所有子產品之間的資料流;根據條件觸發事件。不需要使用者修改
(2)Downloader:根據請求下載下傳網頁。不需要使用者修改
(3)Scheduler:對所有爬取請求進行排程管理。不需要使用者修改
(4)Downloader Middleware:實施Engine、Scheduler和Downloader之間進行使用者可配置的控制,進行修改、丢棄、新增請求或響應。使用者可以編寫配置代碼
(5)Spider:解析Downloader傳回的響應(Response);産生爬取項(scraped item);産生額外的爬取請求(Request)。需要使用者編寫配置代碼
(6)Item Pipelines:以流水線方式處理Spider産生的爬取項;由一組操作順序組成,類似流水線,每個操作是一個Item Pipeline類型;可能操作包括:清理、檢驗和查重爬取項中的HTML資料、将資料存儲到資料庫。需要使用者編寫配置代碼
(7)Spider Middleware:對請求和爬取項的再處理,進行修改、丢棄、新增請求或爬取項。使用者可以編寫配置代碼
流程介紹
資料流的三個路徑--1:
1 Engine從Spider處獲得爬取請求(Request)
2 Engine将爬取請求轉發給Scheduler,用于排程
資料流的三個路徑--2:
3 Engine從Scheduler處獲得下一個要爬取的請求
4 Engine将爬取請求通過中間件發送給Downloader
5 爬取網頁後,Downloader形成響應(Response,通過中間件發給Engine
6 Engine将收到的響應通過中間件發送給Spider處理
資料流的三個路徑--3:
7 Spider處理響應後産生爬取項(scraped Item和新的爬取請求(Requests)給Engine
8 Engine将爬取項發送給Item Pipeline(架構出口)
9 Engine将爬取請求發送給Scheduler
資料流的出入口以及使用者需要配置的部分
二、Scrapy庫 和 Requests庫的比較
相同點:
兩者都可以進行頁面請求和爬取,Python爬蟲的兩個重要技術路線
兩者可用性都好,文檔豐富,入門簡單
兩者都沒有處理js、送出表單、應對驗證碼等功能(可擴充)
差別:
非常小的需求,requests庫
不太小的需求,Scrapy架構,能夠持續的爬取資訊,并積累成自己的爬取庫
定制程度很高的需求(不考慮規模),自搭架構,requests > Scrapy