日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 21ic電子網(wǎng)
[導(dǎo)讀]使用Scrapy開發(fā)一個(gè)分布式爬蟲?你知道最快的方法是什么嗎?一分鐘真的能 開發(fā)好或者修改出 一個(gè)分布式爬蟲嗎? 話不多說(shuō),先讓我們看看怎么實(shí)踐,再詳細(xì)聊聊細(xì)節(jié)。

1分鐘搞定Scrapy分布式爬蟲、隊(duì)列和布隆過(guò)濾器


使用Scrapy開發(fā)一個(gè)分布式爬蟲?你知道最快的方法是什么嗎?一分鐘真的能 開發(fā)好或者修改出 一個(gè)分布式爬蟲嗎?

話不多說(shuō),先讓我們看看怎么實(shí)踐,再詳細(xì)聊聊細(xì)節(jié)。

快速上手

Step 0:

首先安裝 Scrapy-Distributed :

pip?install?scrapy-distributed

如果你沒有所需要的運(yùn)行條件,你可以啟動(dòng)兩個(gè) Docker 鏡像進(jìn)行測(cè)試 (RabbitMQ 和 RedisBloom):

#?pull?and?run?a?RabbitMQ?container.?
docker?run?-d?--name?rabbitmq?-p?0.0.0.0:15672:15672?-p?0.0.0.0:5672:5672?rabbitmq:3?
#?pull?and?run?a?RedisBloom?container.?
docker?run?-d?--name?redis-redisbloom?-p?0.0.0.0:6379:6379?redislabs/rebloom:latest

Step 1 (非必須):

如果你有一個(gè)現(xiàn)成的爬蟲,可以跳過(guò)這個(gè) Step,直接到 Step 2。

創(chuàng)建一個(gè)爬蟲工程,我這里以一個(gè) sitemap 爬蟲為例:

scrapy?startproject?simple_example

然后修改 spiders 文件夾下的爬蟲程序文件:

from?scrapy_distributed.spiders.sitemap?import?SitemapSpider
from?scrapy_distributed.queues.amqp?import?QueueConfig
from?scrapy_distributed.dupefilters.redis_bloom?import?RedisBloomConfig


class?MySpider(SitemapSpider):
????name?=?"example"
????sitemap_urls?=?["http://www.people.com.cn/robots.txt"]
????queue_conf:?QueueConfig?=?QueueConfig(
????????name="example",?durable=True,?arguments={"x-queue-mode":?"lazy",?"x-max-priority":?255}
????)
????redis_bloom_conf:?RedisBloomConfig?=?RedisBloomConfig(key="example:dupefilter")

????def?parse(self,?response):
????????self.logger.info(f"parse?response,?url:?{response.url}")

Step 2:

只需要修改配置文件?settings.py?下的SCHEDULER,?DUPEFILTER_CLASS?并且添加?RabbitMQ和?Redis?的相關(guān)配置,你就可以馬上獲得一個(gè)分布式爬蟲,Scrapy-Distributed 會(huì)幫你初始化一個(gè)默認(rèn)配置的 RabbitMQ 隊(duì)列和一個(gè)默認(rèn)配置的 RedisBloom 布隆過(guò)濾器。

#?同時(shí)集成?RabbitMQ?和?RedisBloom?的?Scheduler
#?如果僅使用?RabbitMQ?的?Scheduler,這里可以填?scrapy_distributed.schedulers.amqp.RabbitScheduler
SCHEDULER?=?"scrapy_distributed.schedulers.DistributedScheduler"
SCHEDULER_QUEUE_CLASS?=?"scrapy_distributed.queues.amqp.RabbitQueue"
RABBITMQ_CONNECTION_PARAMETERS?=?"amqp://guest:guest@localhost:5672/example/?heartbeat=0"
DUPEFILTER_CLASS?=?"scrapy_distributed.dupefilters.redis_bloom.RedisBloomDupeFilter"
BLOOM_DUPEFILTER_REDIS_URL?=?"redis://:@localhost:6379/0"
BLOOM_DUPEFILTER_REDIS_HOST?=?"localhost"
BLOOM_DUPEFILTER_REDIS_PORT?=?6379
#?Redis?Bloom?的客戶端配置,復(fù)制即可
REDIS_BLOOM_PARAMS?=?{
????"redis_cls":?"redisbloom.client.Client"
}
#?布隆過(guò)濾器誤判率配置,不寫配置的情況下默認(rèn)為?0.001
BLOOM_DUPEFILTER_ERROR_RATE?=?0.001
#?布隆過(guò)濾器容量配置,不寫配置的情況下默認(rèn)為?100_0000
BLOOM_DUPEFILTER_CAPACITY?=?100_0000

你也可以給你的 Spider 類,增加兩個(gè)類屬性,來(lái)初始化你的 RabbitMQ 隊(duì)列或 RedisBloom 布隆過(guò)濾器:

class?MySpider(SitemapSpider):
????......
????#?通過(guò)?arguments?參數(shù),可以配置更多參數(shù),這里示例配置了?lazy?模式和優(yōu)先級(jí)最大值
????queue_conf:?QueueConfig?=?QueueConfig(
????????name="example",?durable=True,?arguments={"x-queue-mode":?"lazy",?"x-max-priority":?255}
????)
????#?通過(guò)?key,error_rate,capacity?分別配置布隆過(guò)濾器的redis?key,誤判率,和容量
????redis_bloom_conf:?RedisBloomConfig?=?RedisBloomConfig(key="example:dupefilter",?error_rate=0.001,?capacity=100_0000)
????......

Step 3:

scrapy?crawl?example

檢查一下你的 RabbitMQ 隊(duì)列 和 RedisBloom 過(guò)濾器,是不是已經(jīng)正常運(yùn)行了?

可以看到,Scrapy-Distributed 的加持下,我們只需要修改配置文件,就可以將普通爬蟲修改成支持 RabbitMQ 隊(duì)列 和 RedisBloom 布隆過(guò)濾器的分布式爬蟲。在擁有 RabbitMQ 和 RedisBloom 環(huán)境的情況下,修改配置的時(shí)間也就一分鐘。

關(guān)于Scrapy-Distributed

目前 Scrapy-Distributed 主要參考了Scrapy-Redis 和 scrapy-rabbitmq 這兩個(gè)庫(kù)。

如果你有過(guò) Scrapy 的相關(guān)經(jīng)驗(yàn),可能會(huì)知道 Scrapy-Redis 這個(gè)庫(kù),可以很快速的做分布式爬蟲,如果你嘗試過(guò)使用 RabbitMQ 作為爬蟲的任務(wù)隊(duì)列,你可能還見到過(guò) scrapy-rabbitmq 這個(gè)項(xiàng)目。誠(chéng)然 Scrapy-Redis 已經(jīng)很方便了,scrapy-rabbitmq 也能實(shí)現(xiàn) RabbitMQ 作為任務(wù)隊(duì)列,但是他們存在一些缺陷,我這里簡(jiǎn)單提出幾個(gè)問題。

  • Scrapy-Redis 使用 Redis 的 set 去重,鏈接數(shù)量越大占用的內(nèi)存就越大,不適合任務(wù)數(shù)量大的分布式爬蟲。

  • Scrapy-Redis 使用 Redis 的 list 作為隊(duì)列,很多場(chǎng)景會(huì)有任務(wù)積壓,會(huì)導(dǎo)致內(nèi)存資源消耗過(guò)快,比如我們爬取網(wǎng)站 sitemap 時(shí),鏈接入隊(duì)的速度遠(yuǎn)遠(yuǎn)大于出隊(duì)。

  • scrapy-rabbitmq 等 RabbitMQ 的 Scrapy 組件,在創(chuàng)建隊(duì)列方面,沒有提供 RabbitMQ 支持的各種參數(shù),無(wú)法控制隊(duì)列的持久化等參數(shù)。

  • scrapy-rabbitmq 等 rabbitmq 框架的 Scheduler 暫未支持分布式的 dupefilter ,需要使用者自行開發(fā)或接入相關(guān)組件。

  • Scrapy-Redis 和 scrapy-rabbitmq 等框架都是侵入式的,如果需要用這些框架開發(fā)分布式的爬蟲,需要我們修改自己的爬蟲代碼,通過(guò)繼承框架的 Spider 類,才能實(shí)現(xiàn)分布式功能。

于是,Scrapy-Distributed 框架就在這個(gè)時(shí)候誕生了,在非侵入式設(shè)計(jì)下,你只需要通過(guò)修改 settings.py 下的配置,框架就可以根據(jù)默認(rèn)配置將你的爬蟲分布式化。

為了解決Scrapy-Redis 和 scrapy-rabbitmq 存在的一些痛點(diǎn),Scrapy-Distributed 做了下面幾件事:

  • 采用了 RedisBloom 的布隆過(guò)濾器,內(nèi)存占用更少。

  • 支持了 RabbitMQ 隊(duì)列聲明的所有參數(shù)配置,可以讓 RabbitMQ 隊(duì)列支持 lazy-mode 模式,將減少內(nèi)存占用。

  • RabbitMQ 的隊(duì)列聲明更加靈活,不同爬蟲可以使用相同隊(duì)列配置,也可以使用不同的隊(duì)列配置。

  • Scheduler 的設(shè)計(jì)上支持多個(gè)組件的搭配組合,可以單獨(dú)使用 RedisBloom 的DupeFilter,也可以單獨(dú)使用 RabbitMQ 的 Scheduler 模塊。

  • 實(shí)現(xiàn)了 Scrapy 分布式化的非侵入式設(shè)計(jì),只需要修改配置,就可以將普通爬蟲分布式化。


作者:許臾insutanto
來(lái)源:https://insutanto.net/posts/scrapy/

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉