17-爬虫之scrapy框架五大核心组件工作流程及下载中间件介绍04
scrapy的五大核心組件
引擎(Scrapy)
對整個系統的數據流進行處理, 觸發事務(框架核心).
調度器(Scheduler)
用來接受引擎發過來的請求. 由過濾器過濾重復的url并將其壓入隊列中, 在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什么.
下載器(Downloader)
用于下載網頁內容, 并將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的).
爬蟲(Spiders)
爬蟲是主要干活的, 它可以生成url, 并從特定的url中提取自己需要的信息, 即所謂的實體(Item). 用戶也可以從中提取出鏈接, 讓Scrapy繼續抓取下一個頁面.
項目管道(Pipeline)
負責處理爬蟲從網頁中抽取的實體, 主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息. 當頁面被爬蟲解析后, 將被發送到項目管道, 并經過幾個特定的次序處理數據.
工作流程
當我們執行爬蟲文件的時候,這五大組件就已經開始工作了 。其中,
-
1 首先,我們最原始的起始url是在我們爬蟲文件中的,通常情況系,起始的url只有一個,當我們的爬蟲文件執行的時候,首先對起始url發送請求,將起始url封裝成了請求對象,將請求對象傳遞給了引擎,引擎就收到了爬蟲文件給它發送的封裝了起始URL的請求對象。我們在爬蟲文件中發送的請求并沒有拿到響應(沒有馬上拿到響應),只有請求發送到服務器端,服務器端返回響應,才能拿到響應。
-
2 引擎拿到這個請求對象以后,又將請求對象發送給了調度器,隊列接受到的請求都放到了隊列當中,隊列中可能存在多個請求對象,然后通過過濾器,去掉重復的請求
-
3 調度器將過濾后的請求對象發送給了引擎,
-
4 引擎將拿到的請求對象給了下載器
-
5 下載器拿到請求后將請求拿到互聯網進行數據下載
-
6 互聯網將下載好的數據發送給下載器,此時下載好的數據是封裝在響應對象中的
-
7 下載器將響應對象發送給引擎,引擎接收到了響應對象,此時引擎中存儲了從互聯網中下載的數據。
-
8 最終,這個響應對象又由引擎給了spider(爬蟲文件),由parse方法中的response對象來接收,然后再parse方法中進行解析數據,此時可能解析到新的url,然后再次發請求;也可能解析到相關的數據,然后將數據進行封裝得到item,
-
9 spider將item發送給引擎,
-
10 引擎將item發送給管道。
其中,在引擎和下載中間還有一個下載器中間件,spider和引擎中間有爬蟲中間件,
爬蟲中間件
- 攔截請求和響應,對請求和響應進行處理。
下載器中間件(重點)
- 可以攔截請求和響應對象,請求和響應交互的時候一定會經過下載中間件,可以處理請求和響應。
- 攔截請求:
- 篡改請求url
- 偽裝請求頭信息UA Cookie
- 設置請求代理(重點)
- 攔截響應
- 篡改響應數據
- 代理操作必須使用中間件才可以實現
- process_exception:
- request.meta[‘proxy’] = ‘http://ip:port’ # 設置代理
- process_exception:
- 攔截請求:
創建工程
創建一個爬蟲工程:scrapy startproject proName
進入工程目錄創建爬蟲源文件:scrapy genspider spiderName www.xxx.com
執行工程:scrapy crawl spiderName
對middlewares.py進行精簡并編輯
- 只留下下載中間件的類容
總結
以上是生活随笔為你收集整理的17-爬虫之scrapy框架五大核心组件工作流程及下载中间件介绍04的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16-爬虫之scrapy框架手动请求发送
- 下一篇: 18-爬虫之scrapy框架请求传参实现