Python技術:Scrapy架構介紹!

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

Scrapy簡介

Scrapy,Python開發的一個快速、高層次的web數據抓取框架,用於抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,可以用於數據挖掘、監測和。

Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等。

Scrapy 算得上是Python世界中最常用的爬蟲框架了,同時它也是我掌握的幾種流行語言中最好的爬蟲框架,沒有之一!我認為它也是最難學習的框架,同樣沒有之一。很多初學 Scarpy的經常向我抱怨完全不清楚Scrapy該怎樣入手,即使看的是中文的文檔,也感到很難理解。我當初接觸Scrapy時也有這樣的感覺。之所以感到Scrapy難學,究其原因,是其官方文檔實在太過凌亂,又缺少實用的代碼例子,讓人看得雲里霧里,不知其所已然。雖然其文檔不良,但卻沒有遮擋住它的光輝,它依然是Python世界中目前最好用的爬蟲框架。其架構的思路、蜘蛛執行的效能,還有可擴展的能力都非常出眾,再配以Python語言的簡潔輕巧,使得爬蟲的開發事半功倍。

Scrapy的優點:

  1. 提供了內置的HTTP緩存,以加速本地開發。
  2. 提供了自動節演調節機制,而且具有遵守robots.txt的設置的能力。
  3. 可以定義爬行深度的限制,以避免爬蟲進入死循環鏈接。
  4. 會自動保留會話。
  5. 執行自動HTTP基本認證。不需要明確保存狀態。
  6. 可以自動填寫登錄表單。
  7. Scrapy 有一個內置的中間件,可以自動設置請求中的引用(referrer)頭。
  8. 支持通過3xx響應重定向,也可以通過HTML元刷新。
  9. 避免被網站使用的<noscript>meta重定向困住,以檢測沒有JS支持的頁面。
  10. 默認使用CSS選擇器或XPath編寫解析器。
  11. 可以通過Splash或任何其他技術(如Selenium)呈現JavaScript頁面。
  12. 擁有強大的社區支持和豐富的插件和擴展來擴展其功能。
  13. 提供了通用的蜘蛛來抓取常見的格式:站點地圖、CSV和XML。
  14. 內置支持以多種格式(JSON、CSV、XML、JSON-lines)導出收集的數據並將其存在多個後端(FTP、S3、本地文件系統)中。

Scrapy框架原理

Python技術:Scrapy架構介紹!

image

Scrapy Engine(引擎): 負責Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數據傳遞等。

Scheduler(調度器): 負責接受引擎發送過來的Request請求,並按照一定的方式進行整理排列,入隊,當引擎需要時,交還給引擎。

Downloader(下載器):負責下載Scrapy Engine(引擎)發送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,

Spider(爬蟲):負責處理所有Responses,從中分析提取數據,獲取Item字段需要的數據,並將需要跟進的URL提交給引擎,再次進入Scheduler(調度器),

Item Pipeline(管道):負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、存儲等)的地方.

Downloader Middlewares(下載中間件):你可以當作是一個可以自定義擴展下載功能的組件。

Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests)

Scrapy各個組件介紹

  • Scrapy Engine:

引擎負責控制數據流在系統中所有組件中流動,並在相應動作發生時觸發事件。它也是程序的入口,可以通過scrapy指令方式在命令行啟動,或普通編程方式實例化後調用start方法啟動。

  • 調度器(Scheduler)

調度器從引擎接收爬取請求(Request)並將它們入隊,以便之後引擎請求它們時提供給引擎。一般來說,我們並不需要直接對調度器進行編程,它是由Scrapy主進程進行自動控制的。

  • 下載器(Down-loader)

下載器負責獲取頁面數據並提供給引擎,而後將網站的響應結果對象提供給蜘蛛(Spider)。具體點說,下載器負責處理產生最終發出的請求對象 Request 並將返回的響應生成 Response對象傳遞給蜘蛛。

  • 蜘蛛——Spiders

Spider是用戶編寫用於分析響應(Response)結果並從中提取Item(即獲取的Item)或額外跟進的URL的類。每個Spider負責處理一個特定(或一些)網站。

  • 數據管道——Item Pipeline

Item Pipeline 負責處理被 Spider 提取出來的 Item。 典型的處理有清理、驗證及持久化(例如,存取到數據庫中)。

  • 下載器中間件(Downloader middle-wares)

下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的Response。其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy的功能。

  • Spider中間件(Spider middle-wares)

Spider 中間件是在引擎及 Spider 之間的特定鉤子(specific hook),處理 Spider 的輸入(Response)和輸出(Items及Requests)。其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy的功能。

從Scrapy的系統架構可見,它將整個爬網過程進行了非常具體的細分,並接管了絕大多數複雜的工作,例如,產生請求和響應對象、控制爬蟲的並發等。

進群:960410445 進群即可獲取數十套PDF!

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!