開(kāi)源精選 – 一個(gè)高效的Python爬蟲(chóng)框架Scrapy(開(kāi)源python爬蟲(chóng)軟件)

《開(kāi)源精選》是我們分享Github、Gitee等開(kāi)源社區(qū)中優(yōu)質(zhì)項(xiàng)目的欄目,包括技術(shù)、學(xué)習(xí)、實(shí)用與各種有趣的內(nèi)容。本期推薦的 scrapy是一個(gè)快速的高級(jí)網(wǎng)頁(yè)抓取和網(wǎng)頁(yè)抓取框架,用于抓取網(wǎng)站并從其頁(yè)面中提取結(jié)構(gòu)化數(shù)據(jù)。它可用于廣泛的用途,從數(shù)據(jù)挖掘到監(jiān)控和自動(dòng)化測(cè)試。

開(kāi)源精選 - 一個(gè)高效的Python爬蟲(chóng)框架Scrapy(開(kāi)源python爬蟲(chóng)軟件)

框架示例

Scrapy 是一個(gè)用于抓取網(wǎng)站和提取結(jié)構(gòu)化數(shù)據(jù)的應(yīng)用程序框架,可用于各種有用的應(yīng)用程序,如數(shù)據(jù)挖掘、信息處理或歷史存檔。

下面是一個(gè)爬蟲(chóng)的代碼,它從網(wǎng)站http://quotes.toscrape.com 中抓取名言 ,遵循分頁(yè):

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)

將其放入一個(gè)文本文件中,將其命名為類似名稱 quotes_spider.py 并使用以下 runspider 命令運(yùn)行:

scrapy runspider quotes_spider.py -o quotes.jl

完成后,您將在 quotes.jl 文件中獲得 JSON 行格式的引號(hào)列表,其中包含文本和作者,如下所示:

{"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 蜘蛛處理機(jī)制的鉤子框架,可以在其中插入自定義功能來(lái)處理發(fā)送給Spider進(jìn)行處理的響應(yīng)以及處理從蜘蛛生成的請(qǐng)求和項(xiàng)目。

架構(gòu)概覽

數(shù)據(jù)流:

開(kāi)源精選 - 一個(gè)高效的Python爬蟲(chóng)框架Scrapy(開(kāi)源python爬蟲(chóng)軟件)

執(zhí)行流程:

    1. 該引擎獲取從最初請(qǐng)求爬行蜘蛛。
    2. 該引擎安排在請(qǐng)求調(diào)度程序和要求下一個(gè)請(qǐng)求爬行。
    3. 該計(jì)劃返回下一請(qǐng)求的引擎。
    4. 該引擎發(fā)送請(qǐng)求到 下載器,通過(guò)下載器中間件
    5. 頁(yè)面完成下載后,下載器生成一個(gè)響應(yīng)(帶有該頁(yè)面)并將其發(fā)送到引擎,通過(guò)下載器中間件。
    6. 該引擎接收來(lái)自響應(yīng)下載器并將其發(fā)送到所述 蜘蛛進(jìn)行處理,通過(guò)蜘蛛中間件。
    7. 該蜘蛛處理響應(yīng)并返回旗下的項(xiàng)目和新的要求(跟隨)的引擎,通過(guò)蜘蛛中間件。
    8. 該引擎發(fā)送處理的項(xiàng)目,以項(xiàng)目管道,然后把處理的請(qǐng)求的調(diào)度,并要求今后可能請(qǐng)求爬行。
    9. 該過(guò)程重復(fù)(從第 1 步開(kāi)始),直到不再有來(lái)自Scheduler 的請(qǐng)求 。

安裝指南

Scrapy 需要 Python 3.6 ,CPython 實(shí)現(xiàn)(默認(rèn))或 PyPy 7.2.0 實(shí)現(xiàn)。

安裝 Scrapy

如果您使用的是AnacondaMiniconda,則可以從condaforge頻道安裝該軟件包,該頻道具有適用于 Linux、Windows 和 macOS 的最新軟件包。

要使用 安裝 Scrapy conda,請(qǐng)運(yùn)行:

conda install -c conda-forge scrapy

或者,如果您已經(jīng)熟悉 Python 包的安裝,則可以使用以下命令從 PyPI 安裝 Scrapy 及其依賴項(xiàng):

pip install Scrapy

注意:Scrapy 是用純 Python 編寫(xiě)的,并且依賴于一些關(guān)鍵的 Python 包

  • lxml,一個(gè)高效的 XML 和 HTML 解析器
  • parsel,一個(gè)寫(xiě)在 lxml 之上的 HTML/XML 數(shù)據(jù)提取庫(kù),
  • w3lib,用于處理 URL 和網(wǎng)頁(yè)編碼的多用途助手
  • 扭曲,一個(gè)異步網(wǎng)絡(luò)框架
  • 密碼學(xué)和pyOpenSSL,處理各種網(wǎng)絡(luò)級(jí)安全需求

核心API

爬蟲(chóng)API

Scrapy API 的主要入口點(diǎn)是Crawler 對(duì)象,通過(guò)from_crawler類方法傳遞給擴(kuò)展。該對(duì)象提供對(duì)所有 Scrapy 核心組件的訪問(wèn),它是擴(kuò)展訪問(wèn)它們并將其功能掛鉤到 Scrapy 的唯一方法。

設(shè)置 API

設(shè)置 Scrapy 中使用的默認(rèn)設(shè)置優(yōu)先級(jí)的鍵名和優(yōu)先級(jí)的字典。

每個(gè)項(xiàng)目都定義了一個(gè)設(shè)置入口點(diǎn),為其提供了一個(gè)用于標(biāo)識(shí)的代碼名稱和一個(gè)整數(shù)優(yōu)先級(jí)。在Settings類中設(shè)置和檢索值時(shí),較大的優(yōu)先級(jí)比較小的優(yōu)222222先級(jí)更高 。

蜘蛛加載器API

這個(gè)類負(fù)責(zé)檢索和處理跨項(xiàng)目定義的蜘蛛類。

可以通過(guò)在SPIDER_LOADER_CLASS項(xiàng)目設(shè)置中指定它們的路徑來(lái)使用自定義蜘蛛加載器 。他們必須完全實(shí)現(xiàn)scrapy.interfaces.ISpiderLoader接口以保證無(wú)錯(cuò)執(zhí)行。

信號(hào) API

將接收器的功能連接到信號(hào)。

信號(hào)可以是任何對(duì)象,盡管 Scrapy 帶有一些預(yù)定義的信號(hào),這些信號(hào)記錄在信號(hào) 部分。

統(tǒng)計(jì)收集器 API

scrapy.statscollectors模塊下有幾個(gè)可用的統(tǒng)計(jì)收集器 ,它們都實(shí)現(xiàn)了StatsCollector 類定義的統(tǒng)計(jì)收集器 API (它們都繼承自)。

更多參考:https://github.com/scrapy/scrapy

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部