Scrapy使用RabbitMQ做任务队列

前言

一个月没更博客了,这个月也搞了不少东西,但是公司对保密性要求挺高,很多东西都没有办法写出来
想来想去,还是写一篇最近写Scrapy中遇到的跳转问题
如果你的业务需求是遇到301/302/303跳转的请求时继续请求网址,直到获取到最终的真实数据为止,那么这篇文章将会非常适合你

正文

队列选型

我们在使用SCRAPY中通常会使用分布式来提高爬取效率,所以需要一个任务队列来进行任务的下发,通常,该队列还承担着爬取的结果进行收集交由某几个Worker进行入库的作用
如果使用Redis作为任务队列,推荐使用 scrapy-redis 教程很多,这里不多说
这里着重介绍使用 RabbitMQ 作为任务队列,RabbitMQ的好处有很多,但是还是建议跟着业务走.

使用RabbitMQ作为任务队列

使用RabbitMQ作为任务队列的轮子很少,基本都已停止更新(17年),这里推荐一个国人的修改版,最近才开始发布,但是经本人实测已经可以正常使用
项目地址(GitHub)scrapy-rabbitmq-scheduler
因是国人写的,所以README文件写的通俗易懂.

安装

pip install scrapy-rabbitmq-scheduler

集成至Scrapy

在settings.py最后加入

# 指定项目的调度器
SCHEDULER = "scrapy_rabbitmq_scheduler.scheduler.SaaS"

# 指定rabbitmq的连接DSN
# amqp_url="amqp://username:password@ip:port/"
RABBITMQ_CONNECTION_PARAMETERS = 'amqp://admin:[email protected]:5672/'

# 指定重试的http状态码(重新加回队列重试)
# 如果结果的状态码位该list其中一个则会重试
# SCHEDULER_REQUEUE_ON_STATUS = [500]

# 指定下载器中间件, 确认任务是否成功
DOWNLOADER_MIDDLEWARES = {
    'scrapy_rabbitmq_scheduler.middleware.RabbitMQMiddleware': 999
}

# 指定item处理方式, item会加入到rabbitmq中
ITEM_PIPELINES = {
    'scrapy_rabbitmq_scheduler.pipelines.RabbitmqPipeline': 300,
}

猜你喜欢

转载自www.cnblogs.com/chnmig/p/11987948.html