1. 程式人生 > >【Python】爬蟲-Scrapy

【Python】爬蟲-Scrapy

組件 廣泛 quest edi 支持 聯網 sched 取出 strong

【Scrapy】   Python開發的一個快速,高層次的屏幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據。   Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試。   Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。 【爬蟲執行框架】 Scrapy 使用了 Twisted異步網絡庫來處理網絡通訊。整體架構大致如下: 技術分享圖片技術分享圖片

技術分享圖片 技術分享圖片

Scrapy主要包括了以下組件:

  • 引擎(Scrapy)
    用來處理整個系統的數據流處理, 觸發事務(框架核心)
  • 調度器(Scheduler)
    用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什麽, 同時去除重復的網址
  • 下載器(Downloader)
    用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)
  • 爬蟲(Spiders)
    爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
  • 項目管道(Pipeline)
    負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析後,將被發送到項目管道,並經過幾個特定的次序處理數據。
  • 下載器中間件(Downloader Middlewares)
    位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
  • 爬蟲中間件(Spider Middlewares)
    介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
  • 調度中間件(Scheduler Middewares)
    介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

Scrapy運行流程大概如下:

  1. 引擎從調度器中取出一個鏈接(URL)用於接下來的抓取
  2. 引擎把URL封裝成一個請求(Request)傳給下載器
  3. 下載器把資源下載下來,並封裝成應答包(Response)
  4. 爬蟲解析Response
  5. 解析出實體(Item),則交給實體管道進行進一步的處理
  6. 解析出的是鏈接(URL),則把URL交給調度器等待抓取
技術分享圖片

【URL管理器】 1、添加新的url到待爬取url集合中。 2、判斷待添加的url是否在容器中(包括待爬取url集合和已爬取url集合)。 3、獲取待爬取的url。 4、判斷是否有待爬取的url。 5、將爬取完成的url從待爬取url集合移動到已爬取url集合。 【存儲方式選擇】 1、內存(python內存) 待爬取url集合:set() 已爬取url集合:set() 2、關系數據庫(mysql) urls(url, is_crawled) 3、緩存(redis) 待爬取url集合:set 已爬取url集合:set 大型互聯網公司,由於緩存數據庫的高性能,一般把url存儲在緩存數據庫中。 小型公司,一般把url存儲在內存中, 如果想要永久存儲,則存儲到關系數據庫中。

【Python】爬蟲-Scrapy