動態IP代理軟件有話說:天下爬蟲框架皆出Scrapy

針對規模小、抓取數據量小、對抓取速度不比較敏感的爬蟲軟件, 應用 Requests 能輕輕鬆鬆拿下。這種網頁爬蟲關鍵作用是抓取網頁頁面、輕鬆玩網頁頁面。假如人們必須抓取網站及其系列產品網上平臺,要求網絡爬蟲具備抓取失敗能覆盤、爬取速度較高等特點。很顯然 Requests 不能完全滿足我們的需求。因此,需要一功能更加強大的第三方爬蟲框架庫 —— Scrapy。學會Scrapy,百分之八九十的爬蟲框架都能玩兒轉了。

一、Scrapy 的特性

Scrapy 是一個框架。因而,它集一些各功能強大的 python 庫的優點於一身。下面列舉其一些特性:

HTML, XML源數據 選擇及提取 的內置支持

提供了一系列在spider之間共享的可複用的過濾器(即 Item Loaders),對智能處理爬取數據提供了內置支持。

通過 feed導出 提供了多格式(JSON、CSV、XML),多存儲後端(FTP、S3、本地文件系統)的內置支持

提供了media pipeline,可以 自動下載 爬取到的數據中的圖片(或者其他資源)。

高擴展性。您可以通過使用 signals ,設計好的API(中間件, extensions, pipelines)來定製實現您的功能。

內置的中間件及擴展爲下列功能提供了支持:

cookies and session 處理

HTTP 壓縮

HTTP 認證

HTTP 緩存

user-agent模擬

robots.txt

爬取深度限制

健壯的編碼支持和自動識別,用於處理外文、非標準和錯誤編碼問題

針對多爬蟲下性能評估、失敗檢測,提供了可擴展的 狀態收集工具 。

內置 Web service, 使您可以監視及控制您的機器。


二、初探 Scrapy

  1. Scrapy 工程項目詳細分析

    Scrapy 新創建工程項目需通過命令行操作。在特定文件夾名稱中,開啓終端實行以下命令:

    scrapy startproject 項目的名字

    我新建一個名爲 scrapy_demo,執行結果如下。

    使用 Pycharm 開啓該新項目,讓我們會發覺新項目的層次構架及其文檔。

    這種文檔的功能是:

    scrapy.cfg:工程項目的配置文件,開發設計不用採用。

    scrapy_demo:項目中會有兩個同名的文件夾名稱。最表層表示 project,裏面那個目錄代表 module(項目的核心)。

    scrapy_demo/items.py:以字段形式界定中後期必須處理的網絡數據。

    scrapy_demo/pipelines.py:提取出來的 Item 對象回到的數據並進行存儲。

    scrapy_demo/settings.py:項目的設置文檔。可以對網絡爬蟲進行自定設定,例如挑選深度優先爬取還是廣度優先爬取,設置對每個IP的爬蟲數,設置每個域名的爬蟲數,設置爬蟲延時,設置代理等等。

    scrapy_demo/spider: 這個目錄儲放網頁爬蟲源代碼。

    init.py:python 包要求,對 scrapy 作用不大。

  2. Scrapy 的架構

    Scrapy 好比由許多組件拼裝起來的大機器。因此,可以採取從整體到局部的順序學習 Scrapy。

    Scheduler:調度器。負責接受 Engine 發送過來的 Requests 請求,並將其隊列化;

    Item Pipeline:Item Pipeline負責處理被spider提取出來的item。其有典型應用,如清理 HTML 數據、驗證爬取的數據(檢查 item 包含某些字段)、查重(並丟棄)、爬取數據持久化(存入數據庫、寫入文件等);

    Scrapy Engine:引擎是 Scrapy 的中樞。它負責控制數據流在系統中所有組件中流動,並在相應動作發生時觸發事件;

    Downloader Middlewares:下載中間件是 Engine 和 Downloader 的樞紐。負責處理 Downloader 傳遞給 Engine 的 responses;它還支持自定義擴展。

    Downloader:負責下載 Engine 發送的所有 Requests 請求,並將其獲取到的 responses 回傳給 Scrapy Engine;

    Spider middlewares:Spider 中間件是 Engine 和 Spider 的連接橋樑;它支持自定義擴展來處理 Spider 的輸入(responses) 以及輸出 item 和 requests 給 Engine ;

    Spiders:負責解析 Responses 並提取 Item 字段需要的數據,再將需要跟進的URL提交給引擎,再次進入Scheduler(調度器);

  3. Scrapy 工作機制

    當引擎(Engine) 收到 Spider 發送過來的 url 主入口地址(其實是一個 Request 對象, 因爲 Scrapy 內部是用到 Requests 請求庫),Engine 會進行初始化操作。

    Engine 請求調度器(Scheduler),讓 Scheduler 調度出下一個 url 給 Engine。

    Scheduler 返回下一個 url 給 Engine。

    Engine 將 url通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。

    一旦頁面下載完畢,Downloader 生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給 Engine

    引擎將從下載器中接收到 Response 發送給Spider處理。

    Spider 處理 Response 並返回爬取到的 Item 及新的 Request 給引擎。

    Engine 將 Spider 返回的爬取到的 Item 轉發給Item Pipeline,順便也將將 Request 給調度器。

    重複(第2步)直到調度器中沒有更多地request,引擎關閉該網站。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章