在scrapy中使用scrapy-rabbitmq-scheduler会出现报错
ModuleNotFoundError: No module named 'scrapy.utils.reqser'原因是新的版本的scrapy已经摒弃了该方法,但是scrapy-rabbitmq-scheduler 没有及时的更新,所以此时有两种解决方法
方法一.将scrapy回退至旧版本,找到对应的旧版本
方法二.更改scrapy-rabbitmq-scheduler的源码,我已经重新发了新版本的包
pip install scrapy-rabbitmq-task
然后再次尝试运行代码,发现代码已正常
其他配置都不改变
在spider爬虫文件文件添加
# 请求队列
queue_name = 'scrape'
# 结果队列
items_key = 'scrape.result'
custom_settings = {
"COOKIES_ENABLED": "False",
# 指定重试的http状态码(重新加回队列重试)
"SCHEDULER_REQUEUE_ON_STATUS" :[500],
'SCHEDULER': "scrapy_rabbitmq_scheduler.scheduler.SaaS",
'RABBITMQ_CONNECTION_PARAMETERS': 'amqp://acount:111@2024@127.0.0.1:5672/?heartbeat=0',
'MEDIA_ALLOW_REDIRECTS': True,
'RABBITMQ_CONFIRM_DELIVERY': False,
'ALLOW_REDIRECTS': True,
'RETRY_ENABLED': True,
'RETRY_TIMES': 5,
'DOWNLOAD_TIMEOUT': 50,
'RETRY_HTTP_CODES': [429, 304, 500, 503],
# 指定下载器中间件, 确认任务是否成功
"DOWNLOADER_MIDDLEWARES": {
'scrapy_rabbitmq_scheduler.middleware.RabbitMQMiddleware': 999
},
# 指定item处理方式, item会加入到rabbitmq中
'ITEM_PIPELINES': {
'scrapy_rabbitmq_scheduler.pipelines.RabbitMQPipeline': 301,
},
'FILTER_EMPTY_ITEM': True,}
问题解决
注:我这里采用版本是Scrapy==2.11.2