scrapy怎么让队列中多个请求共用一个代理ip?

问题描述

共有6000个url, 12点的时候启动celery产生任务和队列派给两个服务器去爬, 每次处理100个url, 我用中间件拿到10个代理ip携带上去请求, 100个处理完后, 继续处理队列中的下一组100个url, 但是为什么不读取新的ip呢? 这样6000个url跑完, 永远用的还是第一次那10个ip, 目前我是在process_request函数中每个请求都去读取一个有ip的文本, 而文本定时更换保证只有10个ip, 所以100个请求也只会随机从10个里拿, 但是后边处理队列中其他一堆请求就再也不读取新ip了, 怎么解决呢?

读取文本是为了节省ip, 因为我会控制文本只有10个ip,定时更换, 如果不读取文本,而是直接调取ip接口, 那就需要特别多的ip, 一轮6000个url就需要最少6000个ip, 现在一轮只想用300个ip, 每进行下一组100个url的时候就让它拿新的10个ip , 但貌似现在就不拿... 文本里的ip还在定时更换, 结果scrapy就拿一次, 再也不拿了..

2个服务器, celery+rabbitmq + python+ scrapy爬虫框架

阅读 2.6k
1 个回答

如果在DOWNLOADER_MIDDLEWARES的process_request中设置代理IP,应该是没问题的,至于你说的不读取新的ip,会不会是文件一直被占用导致的?把代理IP换成redis存起来试试,中间件每次读取redis,定时更新redis中的ip

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题