scrapy框架簡介及抓取流程
Scrapy簡介
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。
ScrapyCrawl則是在Scrapy基礎上進一步處理數據的爬蟲框架
Scrapy執行流程圖
Scrapy主要包括了以下組件:
引擎(Scrapy): 用來處理整個系統的數據流處理, 觸發事務(框架核心)
調度器(Scheduler): 用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回.
可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列,
由它來決定下一個要抓取的網址是什麼, 同時去除重複的網址
下載器(Downloader): 用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在
twisted這個高效的異步模型上的)
爬蟲(Spiders): 爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。
用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
項目管道(Pipeline): 負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。
當頁面被爬蟲解析後,將被髮送到項目管道,並經過幾個特定的次序處理數據。
下載器中間件(Downloader Middlewares): 位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與
下載器之間的請求及響應。
爬蟲中間件(Spider Middlewares): 介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
調度中間件(Scheduler Middewares): 介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
Scrapy運行流程:
1,引擎打開一個網站(open a domain),找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
2,引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。
3,引擎向調度器請求下一個要爬取的URL。
4,調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
5,一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。
6,引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。
7,Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
8,引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
9,(從第二步)重複直到調度器中沒有更多地request,引擎關閉該網站
Scrapy 常用命令
srapy startproject xxx 創建爬蟲項目
scrapy crawl spider_name 啓動爬蟲
scrapy runspider spider_file.py 在爲創建項目的情況下,運行一個編寫在Python文件中的spider
scrapy genspider [-t template] <name> <domain> 在當前項目中創建spider
scrapy list 列出所有爬蟲