动态IP代理软件有话说:天下爬虫框架皆出Scrapy
針對規(guī)模小、抓取數(shù)據(jù)量小、對抓取速度不比較敏感的爬蟲軟件, 應(yīng)用 Requests 能輕輕松松拿下。這種網(wǎng)頁爬蟲關(guān)鍵作用是抓取網(wǎng)頁頁面、輕松玩網(wǎng)頁頁面。假如人們必須抓取網(wǎng)站及其系列產(chǎn)品網(wǎng)上平臺,要求網(wǎng)絡(luò)爬蟲具備抓取失敗能復(fù)盤、爬取速度較高等特點。很顯然 Requests 不能完全滿足我們的需求。因此,需要一功能更加強(qiáng)大的第三方爬蟲框架庫 —— Scrapy。學(xué)會Scrapy,百分之八九十的爬蟲框架都能玩兒轉(zhuǎn)了。
一、Scrapy 的特性
Scrapy 是一個框架。因而,它集一些各功能強(qiáng)大的 python 庫的優(yōu)點于一身。下面列舉其一些特性:
HTML, XML源數(shù)據(jù) 選擇及提取 的內(nèi)置支持
提供了一系列在spider之間共享的可復(fù)用的過濾器(即 Item Loaders),對智能處理爬取數(shù)據(jù)提供了內(nèi)置支持。
通過 feed導(dǎo)出 提供了多格式(JSON、CSV、XML),多存儲后端(FTP、S3、本地文件系統(tǒng))的內(nèi)置支持
提供了media pipeline,可以 自動下載 爬取到的數(shù)據(jù)中的圖片(或者其他資源)。
高擴(kuò)展性。您可以通過使用 signals ,設(shè)計好的API(中間件, extensions, pipelines)來定制實現(xiàn)您的功能。
內(nèi)置的中間件及擴(kuò)展為下列功能提供了支持:
cookies and session 處理
HTTP 壓縮
HTTP 認(rèn)證
HTTP 緩存
user-agent模擬
robots.txt
爬取深度限制
健壯的編碼支持和自動識別,用于處理外文、非標(biāo)準(zhǔn)和錯誤編碼問題
針對多爬蟲下性能評估、失敗檢測,提供了可擴(kuò)展的 狀態(tài)收集工具 。
內(nèi)置 Web service, 使您可以監(jiān)視及控制您的機(jī)器。
二、初探 Scrapy
Scrapy 工程項目詳細(xì)分析
Scrapy 新創(chuàng)建工程項目需通過命令行操作。在特定文件夾名稱中,開啟終端實行以下命令:
scrapy startproject 項目的名字
我新建一個名為 scrapy_demo,執(zhí)行結(jié)果如下。
使用 Pycharm 開啟該新項目,讓我們會發(fā)覺新項目的層次構(gòu)架及其文檔。
這種文檔的功能是:
scrapy.cfg:工程項目的配置文件,開發(fā)設(shè)計不用采用。
scrapy_demo:項目中會有兩個同名的文件夾名稱。最表層表示 project,里面那個目錄代表 module(項目的核心)。
scrapy_demo/items.py:以字段形式界定中后期必須處理的網(wǎng)絡(luò)數(shù)據(jù)。
scrapy_demo/pipelines.py:提取出來的 Item 對象回到的數(shù)據(jù)并進(jìn)行存儲。
scrapy_demo/settings.py:項目的設(shè)置文檔。可以對網(wǎng)絡(luò)爬蟲進(jìn)行自定設(shè)定,例如挑選深度優(yōu)先爬取還是廣度優(yōu)先爬取,設(shè)置對每個IP的爬蟲數(shù),設(shè)置每個域名的爬蟲數(shù),設(shè)置爬蟲延時,設(shè)置代理等等。
scrapy_demo/spider: 這個目錄儲放網(wǎng)頁爬蟲源代碼。
init.py:python 包要求,對 scrapy 作用不大。
Scrapy 的架構(gòu)
Scrapy 好比由許多組件拼裝起來的大機(jī)器。因此,可以采取從整體到局部的順序?qū)W習(xí) Scrapy。
Scheduler:調(diào)度器。負(fù)責(zé)接受 Engine 發(fā)送過來的 Requests 請求,并將其隊列化;
Item Pipeline:Item Pipeline負(fù)責(zé)處理被spider提取出來的item。其有典型應(yīng)用,如清理 HTML 數(shù)據(jù)、驗證爬取的數(shù)據(jù)(檢查 item 包含某些字段)、查重(并丟棄)、爬取數(shù)據(jù)持久化(存入數(shù)據(jù)庫、寫入文件等);
Scrapy Engine:引擎是 Scrapy 的中樞。它負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動,并在相應(yīng)動作發(fā)生時觸發(fā)事件;
Downloader Middlewares:下載中間件是 Engine 和 Downloader 的樞紐。負(fù)責(zé)處理 Downloader 傳遞給 Engine 的 responses;它還支持自定義擴(kuò)展。
Downloader:負(fù)責(zé)下載 Engine 發(fā)送的所有 Requests 請求,并將其獲取到的 responses 回傳給 Scrapy Engine;
Spider middlewares:Spider 中間件是 Engine 和 Spider 的連接橋梁;它支持自定義擴(kuò)展來處理 Spider 的輸入(responses) 以及輸出 item 和 requests 給 Engine ;
Spiders:負(fù)責(zé)解析 Responses 并提取 Item 字段需要的數(shù)據(jù),再將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器);
Scrapy 工作機(jī)制
當(dāng)引擎(Engine) 收到 Spider 發(fā)送過來的 url 主入口地址(其實是一個 Request 對象, 因為 Scrapy 內(nèi)部是用到 Requests 請求庫),Engine 會進(jìn)行初始化操作。
Engine 請求調(diào)度器(Scheduler),讓 Scheduler 調(diào)度出下一個 url 給 Engine。
Scheduler 返回下一個 url 給 Engine。
Engine 將 url通過下載中間件(請求(request)方向)轉(zhuǎn)發(fā)給下載器(Downloader)。
一旦頁面下載完畢,Downloader 生成一個該頁面的Response,并將其通過下載中間件(返回(response)方向)發(fā)送給 Engine
引擎將從下載器中接收到 Response 發(fā)送給Spider處理。
Spider 處理 Response 并返回爬取到的 Item 及新的 Request 給引擎。
Engine 將 Spider 返回的爬取到的 Item 轉(zhuǎn)發(fā)給Item Pipeline,順便也將將 Request 給調(diào)度器。
重復(fù)(第2步)直到調(diào)度器中沒有更多地request,引擎關(guān)閉該網(wǎng)站。
轉(zhuǎn)載于:https://blog.51cto.com/14059916/2334702
總結(jié)
以上是生活随笔為你收集整理的动态IP代理软件有话说:天下爬虫框架皆出Scrapy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenSL ES
- 下一篇: 适合0基础的web开发系列教程-换行和水