前言
本文來自嵩天老師《Python網絡爬蟲與信息提取》課程中關於Scrapy框架的介紹。這是我認爲對Scrapy框架講得最爲通俗易懂、條理清晰的教程。
Scrapy是一個爬蟲框架
- 爬蟲框架是實現爬蟲功能的一個軟件結構和功能組件集合。
- 爬蟲框架是一個半成品,能夠幫助用戶實現專業網絡爬蟲。
“5+2”結構
5
是指5個模塊:SPIDERS, ENGINE, SCHEDULER, DOWNLOADER, ITEM PIPELIINES2
是指2箇中間件:spider middleware(位於spiders和engine之間),downloader middleware(位於downloader和engine之間)
3條數據流路徑
spiders -> engine -> scheduler(1,2)
:engine從spiders獲取了用戶的爬取請求(requests,可簡單理解爲一個url),engine將請求發送給scheduler模塊進行調度。scheduler -> engine -> downloader -> engine -> spiders(3,4,5,6)
:engine從schedule獲取一個請求(requests,真實的請求),engine通過中間件(downloader middleware)將請求發送給downloader,downloader獲得請求後,連接互聯網真實的爬取網頁,並將爬取的內容封裝成對象(response,響應)發送給engine,engine再將響應發送給spiders進行解析。
(總結:這條數據流講述一個真實的爬取url的請求,經過scheduler,downloader,最終返回的相關內容到達spiders)spiders -> engine -> item pipelines / scheduler(7,8)
:spiders處理響應的內容,得到兩個數據類型:scraped item(爬取項)、新的爬取請求(即:我們從網頁上獲得一個鏈接之後,如果這個網頁中的其他鏈接也是我們感興趣的內容,就可以在spiders中增加新的功能,再次進行爬取。),spiders將這兩項內容發送給engine,而engine收到之後,將爬取項發送給item pipelines,將requests發送給scheduler。
小結:
- engine控制着各個模塊的數據流,不斷從schedule獲得真實的爬取請求,併發送給downloader進行爬取。
- 整個框架的執行是從spiders向engine發送第一個請求開始,到獲得所有鏈接的內容並將內容處理完放到item pipelines結束。所以框架的入口是spiders,出口是item pipelines。
- engine、downloaders、scheduler是已有實現,無需用戶編輯;spiders和item pipelines需要用戶自行編寫。
5個模塊的功能
- Engine(不需要用戶修改):
- 控制所有模塊之間的數據流
- 根據條件觸發事件
- Downloader(不需要用戶修改):
- 根據請求下載頁面
- Scheduler(不需要用戶修改):
- 對所有爬取請求進行調度管理
- Spider(需要用戶編寫配置代碼)
- 解析Downloader返回的響應(Response)
- 產生爬取項(scrapyed item)
- 產生額外的爬取請求(Request)
- Item Pipelines(需要用戶編寫配置代碼)
- 以流水線方式處理Spider產生的爬取項
- 由一組操作順序組成,類似流水線,每個操作是一個Item Pipeline類型
- 可能操作包括:清理、檢驗和查重爬取項中的HTML數據、將數據存儲到數據庫。
2箇中間件
- Downloader Middleware(用戶可編寫配置代碼)
- 目的:實施Engine、Scheduler和Downloader之間的數據流進行用戶可配置的控制
- 功能修改、丟棄、新增請求或響應
- Spider Middleware(用戶可編寫配置代碼)
- 目的:對請求和爬取項的再處理
- 功能:修改、丟棄、新增請求或爬取項
總結
從上述的介紹中,我們可以看出,框架中的五個模塊形成了既定的功能,我們重點編寫Spiders和Item Pipelines,用戶爲了操作其中的數據流,可以通過兩個中間件,對request、response、item進行操作。
參考:https://www.bilibili.com/video/BV1qs411n79v?p=50