日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scrapy源码阅读分析_1_整体框架和流程介绍

發布時間:2024/7/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scrapy源码阅读分析_1_整体框架和流程介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

From:https://blog.csdn.net/weixin_37947156/article/details/74435304

Scrapy github 下載地址:https://github.com/scrapy/scrapy

?

?

介紹

?

Scrapy是一個基于Python編寫的一個開源爬蟲框架,它可以幫你快速、簡單的方式構建爬蟲,并從網站上提取你所需要的數據。

這里不再介紹Scrapy的安裝和使用,本系列主要通過閱讀源碼講解Scrapy實現思路為主。

如果有不懂如何使用的同學,請參考官方網站或官方文檔學習。

------------------------------------------------------------------------------------------
scrapy?中文文檔 和 scrapy 英文文檔參照看。因為中文文檔比較老,英文文檔是最新的。
scrapy 英文文檔:https://doc.scrapy.org/en/latest
scrapy 中文文檔:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
高性能爬蟲 Scrapy 框架:https://www.cnblogs.com/wwg945/articles/9021888.html
------------------------------------------------------------------------------------------

簡單來說構建和運行一個爬蟲只需完成以下幾步:

  • 使用 scrapy startproject spider_project?創建爬蟲模板或自己編寫爬蟲腳本
  • 爬蟲類 繼承 scrapy.Spider,重寫 parse 方法
  • parse 方法中 yield 或 return 字典、Request、Item
  • 使用 scrapy crawl <spider_name>scrapy runspider <spider_file.py>運行
  • 經過簡單的幾行代碼,就能采集到某個網站下一些頁面的數據,非常方便。

    但是在這背后到底發生了什么?Scrapy到底是如何幫助我們工作的呢?

    ?

    ?

    ?

    架構

    ?

    來看一看 Scrapy 的架構圖:

    ?

    ?

    ?

    核心組件

    ?

    Scrapy有以下幾大組件:

  • Scrapy Engine:核心引擎,負責控制和調度各個組件,保證數據流轉;
  • Scheduler:負責管理任務、過濾任務、輸出任務的調度器,存儲、去重任務都在此控制;
  • Downloader:下載器,負責在網絡上下載網頁數據,輸入待下載URL,輸出下載結果;
  • Spiders:用戶自己編寫的爬蟲腳本,可自定義抓取意圖;
  • Item Pipeline:負責輸出結構化數據,可自定義輸出位置;
  • 除此之外,還有兩大中間件組件:

  • Downloader middlewares:介于引擎和下載器之間,可以在網頁在下載前、后進行邏輯處理;
  • Spider middlewares:介于引擎和爬蟲之間,可以在調用爬蟲輸入下載結果和輸出請求/數據時進行邏輯處理;
  • ?

    ?

    ?

    數據流轉

    ?

    按照架構圖的序號,數據流轉大概是這樣的:

  • 引擎從自定義爬蟲中獲取初始化請求(也叫種子URL);
  • 引擎把該請求放入調度器中,同時引擎向調度器獲取一個待下載的請求(這兩部是異步執行的);
  • 調度器返回給引擎一個待下載的請求;
  • 引擎發送請求給下載器,中間會經過一系列下載器中間件;
  • 這個請求通過下載器下載完成后,生成一個響應對象,返回給引擎,這中間會再次經過一系列下載器中間件;
  • 引擎接收到下載返回的響應對象后,然后發送給爬蟲,執行自定義爬蟲邏輯,中間會經過一系列爬蟲中間件;
  • 爬蟲執行對應的回調方法,處理這個響應,完成用戶邏輯后,會生成結果對象或新的請求對象給引擎,再次經過一系列爬蟲中間件;
  • 引擎把爬蟲返回的結果對象交由結果處理器處理,把新的請求對象通過引擎再交給調度器;
  • 從1開始重復執行,直到調度器中沒有新的請求處理;
  • ?

    ?

    ?

    核心組件交互圖

    ?

    我在讀完源碼后,整理出一個更詳細的架構圖,其中展示了更多相關組件的細節:

    這里需要說明一下圖中的Scrapyer,其實這也是在源碼的一個核心類,但官方架構圖中沒有展示出來,這個類其實是處于Engine、Spiders、Pipeline之間,是連通這3個組件的橋梁,后面在文章中會具體講解。

    ?

    ?

    ?

    核心類圖

    ?

    涉及到的一些核心類如下:

    其中標沒有樣式的黑色文字是類的核心屬性黃色樣式的文字都是核心方法

    可以看到,Scrapy的核心類,其實主要包含5大組件、4大中間件管理器、爬蟲類和爬蟲管理器、請求、響應對象和數據解析類這幾大塊。

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的Scrapy源码阅读分析_1_整体框架和流程介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。