開源精選 – 一個高效的Python爬蟲框架Scrapy(開源python爬蟲軟件)
開源精選 | 一個高效的Python爬蟲框架Scrapy(開源python爬蟲軟件)
《開源精選》是我們分享Github、Gitee等開源社區(qū)中優(yōu)質項目的欄目,包括技術、學習、實用與各種有趣的內容。本期推薦的 scrapy是一個快速的高級網頁抓取和網頁抓取框架,用于抓取網站并從其頁面中提取結構化數(shù)據(jù)。它可用于廣泛的用途,從數(shù)據(jù)挖掘到監(jiān)控和自動化測試。
框架示例
Scrapy 是一個用于抓取網站和提取結構化數(shù)據(jù)的應用程序框架,可用于各種有用的應用程序,如數(shù)據(jù)挖掘、信息處理或歷史存檔。
下面是一個爬蟲的代碼,它從網站http://quotes.toscrape.com 中抓取名言 ,遵循分頁:
import scrapyclass QuotesSpider(scrapy.Spider): name = 'quotes' start_urls = [ 'http://quotes.toscrape.com/tag/humor/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'author': quote.xpath('span/small/text()').get(), 'text': quote.css('span.text::text').get(), } next_page = response.css('li.next a::attr("href")').get() if next_page is not None: yield response.follow(next_page, self.parse)
將其放入一個文本文件中,將其命名為類似名稱 quotes_spider.py 并使用以下 runspider 命令運行:
scrapy runspider quotes_spider.py -o quotes.jl
完成后,您將在 quotes.jl 文件中獲得 JSON 行格式的引號列表,其中包含文本和作者,如下所示:
{"author": "Jane Austen", "text": "u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.u201d"}{"author": "Steve Martin", "text": "u201cA day without sunshine is like, you know, night.u201d"}{"author": "Garrison Keillor", "text": "u201cAnyone who thinks sitting in church can make you a Christian must also think that sitting in a garage can make you a car.u201d"}...
蜘蛛中間件
Spider 中間件是 Scrapy 蜘蛛處理機制的鉤子框架,可以在其中插入自定義功能來處理發(fā)送給Spider進行處理的響應以及處理從蜘蛛生成的請求和項目。
架構概覽
數(shù)據(jù)流:
執(zhí)行流程:
- 該引擎獲取從最初請求爬行蜘蛛。
- 該引擎安排在請求調度程序和要求下一個請求爬行。
- 該計劃返回下一請求的引擎。
- 該引擎發(fā)送請求到 下載器,通過下載器中間件。
- 頁面完成下載后,下載器生成一個響應(帶有該頁面)并將其發(fā)送到引擎,通過下載器中間件。
- 該引擎接收來自響應下載器并將其發(fā)送到所述 蜘蛛進行處理,通過蜘蛛中間件。
- 該蜘蛛處理響應并返回旗下的項目和新的要求(跟隨)的引擎,通過蜘蛛中間件。
- 該引擎發(fā)送處理的項目,以項目管道,然后把處理的請求的調度,并要求今后可能請求爬行。
- 該過程重復(從第 1 步開始),直到不再有來自Scheduler 的請求 。
安裝指南
Scrapy 需要 Python 3.6 ,CPython 實現(xiàn)(默認)或 PyPy 7.2.0 實現(xiàn)。
安裝 Scrapy
如果您使用的是Anaconda或Miniconda,則可以從conda– forge頻道安裝該軟件包,該頻道具有適用于 Linux、Windows 和 macOS 的最新軟件包。
要使用 安裝 Scrapy conda,請運行:
conda install -c conda-forge scrapy
或者,如果您已經熟悉 Python 包的安裝,則可以使用以下命令從 PyPI 安裝 Scrapy 及其依賴項:
pip install Scrapy
注意:Scrapy 是用純 Python 編寫的,并且依賴于一些關鍵的 Python 包
- lxml,一個高效的 XML 和 HTML 解析器
- parsel,一個寫在 lxml 之上的 HTML/XML 數(shù)據(jù)提取庫,
- w3lib,用于處理 URL 和網頁編碼的多用途助手
- 扭曲,一個異步網絡框架
- 密碼學和pyOpenSSL,處理各種網絡級安全需求
核心API
爬蟲API
Scrapy API 的主要入口點是Crawler 對象,通過from_crawler類方法傳遞給擴展。該對象提供對所有 Scrapy 核心組件的訪問,它是擴展訪問它們并將其功能掛鉤到 Scrapy 的唯一方法。
設置 API
設置 Scrapy 中使用的默認設置優(yōu)先級的鍵名和優(yōu)先級的字典。
每個項目都定義了一個設置入口點,為其提供了一個用于標識的代碼名稱和一個整數(shù)優(yōu)先級。在Settings類中設置和檢索值時,較大的優(yōu)先級比較小的優(yōu)222222先級更高 。
蜘蛛加載器API
這個類負責檢索和處理跨項目定義的蜘蛛類。
可以通過在SPIDER_LOADER_CLASS項目設置中指定它們的路徑來使用自定義蜘蛛加載器 。他們必須完全實現(xiàn)scrapy.interfaces.ISpiderLoader接口以保證無錯執(zhí)行。
信號 API
將接收器的功能連接到信號。
信號可以是任何對象,盡管 Scrapy 帶有一些預定義的信號,這些信號記錄在信號 部分。
統(tǒng)計收集器 API
scrapy.statscollectors模塊下有幾個可用的統(tǒng)計收集器 ,它們都實現(xiàn)了StatsCollector 類定義的統(tǒng)計收集器 API (它們都繼承自)。
更多參考:https://github.com/scrapy/scrapy