在1分钟内获得Scrapy分布式爬虫,队列和Bloom过滤器
时间:
使用Scrapy开发分布式爬虫?你知道最快的方法吗?一分钟内可以开发或修改分布式搜寻器吗?话不多说,让我们先看看如何练习,然后再详细讨论细节。快速入门步骤0:首先安装Scrapy-Distributed:pip install scrapy-distributed如果没有所需的操作条件,则可以启动两个Docker映像进行测试(RabbitMQ和RedisBloom):#拉并运行RabbitMQ容器。
docker run -d --name rabbitmq -p 0.0.0.0:15672:15672 -p 0.0.0.0:5672:5672 rabbitmq:3#拉并运行RedisBloom容器。 docker run -d --name redis-redisbloom -p 0.0.0.0:6379:6379 redislabs / rebloom:latest步骤1(不需要):如果您有现成的搜寻器,则可以跳过此步骤并直接转到步骤2.要创建一个爬虫项目,我将以一个站点地图爬虫为例:scrapy startproject simple_example然后修改Spiders文件夹中的爬虫程序文件:从scrapy_distributed.spiders.sitemap从scrapy_distributed.queues.amqp导入SitemapSpider导入Distributed Queue Distributed。
MySpider(SitemapSpider):名称=“示例”; sitemap_urls = [“ http://www.people.com.cn/robots.txt”] queue_conf:QueueConfig = QueueConfig(name =“ example”,持久性= True,参数=“ x-queue-mode”: “ lazy”,“ x-max-priority”:255)redis_bloom_conf:RedisBloomConfig = RedisBloomConfig(key =“ example:dupefilter”)def parse(自身,响应):信息。 (f“解析响应,URL:{response.url}”)。
步骤2:您只需要在配置文件settings.py下修改SCHEDULER,DUPEFILTER_CLASS并添加RabbitMQ和Redis的相关配置,即可获得一个立即发布分布式抓取工具。 Scrapy-Distributed将帮助您使用默认配置初始化RabbitMQ队列,并使用默认配置初始化RedisBloom Bloom过滤器。
#在集成RabbitMQ和RedisBloom调度程序时#如果仅调度程序的RabbitMQ,则可以在其中填充scrapy_distributed.schedulers.amqp.RabbitSchedulerSCHEDULER =“ 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_RED="=” ; BLOOM_“ PEFILTER_REDPORT_DUPEFILTER_RED 6379#Redis Bloom客户端配置,只需复制REDIS_BLOOM_PARAMS = {” redis_cls“:” redisbloom.client.Client“}#Bloom过滤器误判率配置,默认值为0.001BLOOM_DURATEFTER您无需编写配置,默认值为100_0000 BLOOM_DUPEFILTER_CAPACITY = 100_0000您还可以向Spider类添加两个类属性以初始化RabbitMQ队列或RedisBloom Bloom过滤器:MySpider(SitemapSpider)类:...#通过arguments参数,您可以配置更多参数。此处的示例配置有延迟模式和最大优先级queue_conf:QueueConfig = QueueConfig(name =“ example”,持久性= True,arguments = {“ x-queue-mode”:“ lazy”,“ x” -max-priority”:255)#通过密钥,错误率和容量,误判率和容量redis_bloom_conf分别配置bloom过滤器的redis密钥:RedisBloomConfig = RedisBloomConfig(key =“ example:dupefilter”,error_rate = 0.001,容量= 100_0000)...步骤3:抓取抓取示例检查RabbitMQ队列和RedisBloom过滤器是否正常运行?如您所见,在Scrapy-Distributed的支持下,我们只需要修改配置文件即可将普通爬网程序修改为支持RabbitMQ队列和RedisBloom Bloom过滤器的分布式爬网程序。
对于RabbitMQ和RedisBloom环境,修改配置的时间仅为一分钟。关于Scrapy-Distributed当前,Scrapy-Distributed主要指Scrapy-Redis和scrapy-rabbitmq这两个库。
如果您有使用Scrapy的经验,您可能会知道Scrapy-Redis是一个可以快速进行分布式爬网程序的库。如果您试图将RabbitMQ用作搜寻器任务队列,则可能已经看到了scrapy-rabbitmq项目。
。确实,Scrapy-Redis已经非常方便,而且scrapy-rabbitmq也可以将RabbitMQ实施为任务队列,但是它们有一些缺点。
我将在这里简要提出几个问题。 Scrapy-Redis使用Redis设置重复数据删除。
链接数量越大,占用的内存就越大,这不适合具有大量任务的分布式搜寻器。 Scrapy-Redis使用Redis的列表作为队列。
在许多情况下,任务积压,将导致过多的内存资源消耗。例如,当我们抓取站点地图时。
产品资料
行业信息