国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一分鐘搞定Scrapy分布式爬蟲、隊列和布隆過濾器

開發 后端 分布式
使用Scrapy開發一個分布式爬蟲?你知道最快的方法是什么嗎?一分鐘真的能 開發好或者修改出 一個分布式爬蟲嗎?先讓我們看看怎么實踐,再詳細聊聊細節。

[[348974]]

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

話不多說,先讓我們看看怎么實踐,再詳細聊聊細節。

快速上手

Step 0:

首先安裝 Scrapy-Distributed : 

  1. pip install scrapy-distributed 

如果你沒有所需要的運行條件,你可以啟動兩個 Docker 鏡像進行測試 (RabbitMQ 和 RedisBloom): 

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

Step 1 (非必須):

如果你有一個現成的爬蟲,可以跳過這個 Step,直接到 Step 2。

創建一個爬蟲工程,我這里以一個 sitemap 爬蟲為例:

  1. scrapy startproject simple_example 

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

  1. from scrapy_distributed.spiders.sitemap import SitemapSpider  
  2. from scrapy_distributed.queues.amqp import QueueConfig  
  3. from scrapy_distributed.dupefilters.redis_bloom import RedisBloomConfig  
  4. class MySpider(SitemapSpider):  
  5.     name = "example"  
  6.     sitemap_urls = ["http://www.people.com.cn/robots.txt"]  
  7.     queue_conf: QueueConfigQueueConfig = QueueConfig(  
  8.         name="example"durable=Truearguments={"x-queue-mode": "lazy", "x-max-priority": 255}  
  9.     )  
  10.     redis_bloom_conf: RedisBloomConfigRedisBloomConfig = RedisBloomConfig(key="example:dupefilter" 
  11.     def parse(self, response): 
  12.          self.logger.info(f"parse response, url: {response.url}") 

Step 2:

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

  1. # 同時集成 RabbitMQ 和 RedisBloom 的 Scheduler  
  2. # 如果僅使用 RabbitMQ 的 Scheduler,這里可以填 scrapy_distributed.schedulers.amqp.RabbitScheduler  
  3. SCHEDULER = "scrapy_distributed.schedulers.DistributedScheduler"  
  4. SCHEDULER_QUEUE_CLASS = "scrapy_distributed.queues.amqp.RabbitQueue"  
  5. RABBITMQ_CONNECTION_PARAMETERS = "amqp://guest:guest@localhost:5672/example/?heartbeat=0"  
  6. DUPEFILTER_CLASS = "scrapy_distributed.dupefilters.redis_bloom.RedisBloomDupeFilter"  
  7. BLOOM_DUPEFILTER_REDIS_URL = "redis://:@localhost:6379/0"  
  8. BLOOM_DUPEFILTER_REDIS_HOST = "localhost"  
  9. BLOOM_DUPEFILTER_REDIS_PORT = 6379  
  10. # Redis Bloom 的客戶端配置,復制即可  
  11. REDIS_BLOOM_PARAMS = {  
  12.     "redis_cls": "redisbloom.client.Client"  
  13.  
  14. # 布隆過濾器誤判率配置,不寫配置的情況下默認為 0.001  
  15. BLOOM_DUPEFILTER_ERROR_RATE = 0.001  
  16. # 布隆過濾器容量配置,不寫配置的情況下默認為 100_0000  
  17. BLOOM_DUPEFILTER_CAPACITY = 100_0000 

你也可以給你的 Spider 類,增加兩個類屬性,來初始化你的 RabbitMQ 隊列或 RedisBloom 布隆過濾器: 

  1. class MySpider(SitemapSpider):  
  2.     ......  
  3.     # 通過 arguments 參數,可以配置更多參數,這里示例配置了 lazy 模式和優先級最大值  
  4.     queue_conf: QueueConfigQueueConfig = QueueConfig(  
  5.         name="example"durable=Truearguments={"x-queue-mode": "lazy", "x-max-priority": 255}  
  6.     )  
  7.     # 通過 key,error_rate,capacity 分別配置布隆過濾器的redis key,誤判率,和容量  
  8.     redis_bloom_conf: RedisBloomConfigRedisBloomConfig = RedisBloomConfig(key="example:dupefilter"error_rate=0.001, capacity=100_0000 
  9.     ...... 

Step 3:

  1. scrapy crawl example 

檢查一下你的 RabbitMQ 隊列 和 RedisBloom 過濾器,是不是已經正常運行了?

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

關于Scrapy-Distributed

目前 Scrapy-Distributed 主要參考了Scrapy-Redis 和 scrapy-rabbitmq 這兩個庫。

如果你有過 Scrapy 的相關經驗,可能會知道 Scrapy-Redis 這個庫,可以很快速的做分布式爬蟲,如果你嘗試過使用 RabbitMQ 作為爬蟲的任務隊列,你可能還見到過 scrapy-rabbitmq 這個項目。誠然 Scrapy-Redis 已經很方便了,scrapy-rabbitmq 也能實現 RabbitMQ 作為任務隊列,但是他們存在一些缺陷,我這里簡單提出幾個問題。

  •  Scrapy-Redis 使用 Redis 的 set 去重,鏈接數量越大占用的內存就越大,不適合任務數量大的分布式爬蟲。
  •  Scrapy-Redis 使用 Redis 的 list 作為隊列,很多場景會有任務積壓,會導致內存資源消耗過快,比如我們爬取網站 sitemap 時,鏈接入隊的速度遠遠大于出隊。
  •  scrapy-rabbitmq 等 RabbitMQ 的 Scrapy 組件,在創建隊列方面,沒有提供 RabbitMQ 支持的各種參數,無法控制隊列的持久化等參數。
  •  scrapy-rabbitmq 等 rabbitmq 框架的 Scheduler 暫未支持分布式的 dupefilter ,需要使用者自行開發或接入相關組件。
  •  Scrapy-Redis 和 scrapy-rabbitmq 等框架都是侵入式的,如果需要用這些框架開發分布式的爬蟲,需要我們修改自己的爬蟲代碼,通過繼承框架的 Spider 類,才能實現分布式功能。

于是,Scrapy-Distributed 框架就在這個時候誕生了,在非侵入式設計下,你只需要通過修改 settings.py 下的配置,框架就可以根據默認配置將你的爬蟲分布式化。

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

  •  采用了 RedisBloom 的布隆過濾器,內存占用更少。
  •  支持了 RabbitMQ 隊列聲明的所有參數配置,可以讓 RabbitMQ 隊列支持 lazy-mode 模式,將減少內存占用。
  •  RabbitMQ 的隊列聲明更加靈活,不同爬蟲可以使用相同隊列配置,也可以使用不同的隊列配置。
  •  Scheduler 的設計上支持多個組件的搭配組合,可以單獨使用 RedisBloom 的DupeFilter,也可以單獨使用 RabbitMQ 的 Scheduler 模塊。
  •  實現了 Scrapy 分布式化的非侵入式設計,只需要修改配置,就可以將普通爬蟲分布式化。

目前框架還有很多功能正在添加,感興趣的小伙伴可以持續關注項目倉庫的動向,有什么想法也可以一起討論。 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2018-06-28 14:00:01

分布式集群架構

2016-12-16 11:05:00

分布式互斥線程

2024-01-05 09:04:35

隆過濾器數據結構哈希函數

2019-06-21 10:00:42

微服務分布式架構

2011-02-21 17:48:35

vsFTPd

2020-08-28 13:02:17

布隆過濾器算法

2025-03-11 08:50:00

CASID分布式

2024-11-04 08:45:48

布隆過濾器元數據指紋值

2024-03-15 11:21:22

布隆過濾器數據庫數據

2009-12-02 17:21:19

Cisco路由器配置

2017-03-30 19:28:26

HBase分布式數據

2020-05-21 19:46:19

區塊鏈數字貨幣比特幣

2018-06-26 05:23:19

線程安全函數代碼

2017-07-06 08:12:02

索引查詢SQL

2022-07-18 06:16:07

單點登錄系統

2018-07-31 16:10:51

Redo Undo數據庫數據

2017-02-21 13:00:27

LoadAverage負載Load

2024-09-18 10:08:37

2025-05-26 09:25:00

Web 接口開發Redis

2025-02-08 17:30:00

布隆過濾器數據結構
點贊
收藏

51CTO技術棧公眾號

国内一区二区在线| 国产一区二区三区亚洲综合| 久久亚洲风情| 国产美女精品视频| 99国内精品久久久久| 日韩美女主播在线视频一区二区三区| 国产黄色免费网| 久久久久久久久久久久久久久99| 中文字幕中文字幕在线中一区高清| 亚洲美女视频| 国产精品自产拍高潮在线观看| 国产精品麻豆| 中文字幕一区二区三区电影| 狠狠操一区二区三区| 欧美黄网站在线观看| 怕怕欧美视频免费大全| 国产精品第一页第二页第三页| 中文字幕不卡在线视频极品| 中文天堂在线观看| 亚洲最大色网站| 国产网友自拍视频导航网站在线观看| 欧美高清视频手机在在线| 日韩精品一二| 欧美精品在线播放| 不卡福利视频| 欧美三级三级三级爽爽爽| 日本在线免费观看视频| 欧美性猛交xxxx乱大交3| 国产真实生活伦对白| 99re在线精品| 亚洲va男人天堂| 国产原创在线观看| 国产一区二区三区自拍| 久久久精品在线观看| 少妇高清精品毛片在线视频| 色成人综合网| 亚洲婷婷在线视频| 亚洲bt天天射| 亚洲欧美日韩综合国产aⅴ| 久久91亚洲精品中文字幕奶水| av在线不卡播放| 国产喂奶挤奶一区二区三区| 内射国产内射夫妻免费频道| 亚洲第一网站| 91中文在线观看| 欧美精品不卡| 亚洲自拍另类欧美丝袜| 菠萝蜜视频在线观看www入口| 国产精品久久精品日日| 免费极品av一视觉盛宴| 7m精品国产导航在线| 亚洲精品久久久久久久久久久久| 老司机在线看片网av| 欧美日韩精品欧美日韩精品一| 人人做人人爽| 亚洲免费在线电影| 四虎4hu新地址入口2023| 色94色欧美sute亚洲线路一ni | 能在线观看av网站| 一区二区国产盗摄色噜噜| 伊人永久在线| 亚洲国产电影在线观看| 国产区在线观看| 日韩一级大片在线观看| 黄色成人在线| 国产精品va在线| 亚洲综合国产激情另类一区| 久久久国产精品一区二区三区| 欧美激情一区二区三区不卡 | 九色在线91| 久久精品一区二区三区不卡 | 欧美亚洲三级| 妞干网2018| 91a在线视频| 欧美一区网站| 裸体免费网站| 国产精品黄色影片导航在线观看| 一本久道综合色婷婷五月| 国产精品久久久久四虎| 精品国产一区二区三区成人影院 | 国产91精品对白在线播放| 成人免费观看视频在线观看| 亚洲毛片在线看| www.在线欧美| 写真福利精品福利在线观看| 日本久久久久久久久久久| 国产精品午夜久久| 日韩123区| 国产精品国产精品国产专区蜜臀ah| 亚洲成人av电影在线| 国产精品一区二区99| 嫩草在线播放| 中文字幕av导航| 色综合视频网站| 亚洲免费高清视频在线| 国产欧美三级电影| 欧美巨乳在线| 一本久道高清无码视频| 欧美日韩免费在线视频| 日av在线不卡| 电影亚洲一区| 色老板在线视频| 亚洲人成人77777线观看| 国产精品视频久久久| 香蕉视频成人在线观看| 黄色网址在线播放| 青春草国产视频| 91九色综合久久| 精品国产免费人成在线观看| 成人动漫一区二区三区| 丝袜美腿综合| 中文字幕在线观看播放| 日韩国产美国| 久久久久久久亚洲精品| 亚洲成人中文在线| 亚洲精品推荐| 久久不卡日韩美女| 宅男网站在线免费观看| 美乳中文字幕| 中文字幕日韩一区二区三区不卡| 日本久久电影网| 国产精品久久久久影院色老大| 国产伦精品一区二区三区千人斩| 色www免费视频| 91手机视频在线| 精品国产一区二区三区久久久久久| 欧美日韩大陆在线| 日韩成人dvd| 精品国产一区二区三区久久久蜜臀| 亚洲国产欧美日本视频| 日本啊v在线| 国产va在线观看| 日韩中文不卡| 精品麻豆av| 成人信息集中地欧美| 中文字幕久久精品| 欧美性20hd另类| 国产精品美女久久久久av爽李琼 | 日韩在线卡一卡二| 最新av番号| 成人黄色免费看| 一区二区三区天堂av| 欧美日韩另类一区| 欧美裸体一区二区三区| 欧美丝袜一区二区| 欧美综合一区二区| 午夜免费久久看| 亚洲丰满少妇videoshd| 偷窥少妇高潮呻吟av久久免费| 欧美日韩国产综合新一区| 欧美日韩国产页| 日韩欧美高清视频| 亚洲一区二区欧美| 国产精品视频一区二区三区不卡| 国产精品一级二级三级| 丁香亚洲综合激情啪啪综合| 久久亚洲综合av| 夜夜精品视频一区二区| 成人性生交大合| 国产精品电影院| 国产亚洲欧美激情| 中文av字幕一区| 成人手机在线视频| 日本不卡不码高清免费观看| 久久福利视频一区二区| 亚洲影视一区二区三区| 亚洲午夜一区| 国产一区日韩二区欧美三区| 亚洲少妇最新在线视频| 91香蕉国产在线观看软件| 麻豆精品在线播放| www激情久久| 欧美一区二区视频观看视频| 久久精品人人做人人爽人人| 欧美一级网址| 午夜影院免费在线| 一级毛片在线| 一个人看的www一区| 黑人糟蹋人妻hd中文字幕| 国产原创一区二区三区| 99视频有精品高清视频| h视频在线免费观看| 菠萝蜜视频在线观看www入口| 国模精品视频一区二区| 色8久久人人97超碰香蕉987| 精品在线一区二区三区| 国产亚洲精品美女久久| 国内在线免费高清视频| 国产 欧美 日韩 一区| 国产美女91呻吟求| 亚洲精品久久7777777| 一区二区三区精品视频| 美女视频一区二区三区| 亚洲自拍电影| 色一区二区三区| 视频一区二区在线播放| 男人日女人bb视频| 欧美极品一区二区| 国产精品高潮呻吟久久av野狼 | 自拍自偷一区二区三区|