scrapy用代理ip爬取出现的问题?

问题介绍:

我有一个代理ip池,大约有1000个ip,放在自己定义的MyCustomProxyMiddleware中:

def process_request(self, request, spider):
    proxy_address = random.choice(self.proxies)
    request.meta['proxy'] = proxy_address
    
 def process_exception(self, request, exception, spider):
    proxy = request.meta['proxy']
    log.msg('Removing failed proxy <%s>, %d proxies left' % (
                proxy, len(self.proxies)))
    try:
        del self.proxies
    except ValueError:
        pass
        

我设置DOWNLOAD_TIMEOUT = 1200

问题:
运行后出现:TCP connection time out 10086.

补充:
如果用本机ip不会出现这个问题。

自己的理解:
每次request请求,都会在代理ip池中自由选择一个ip,但是如果这时ip出现问题,此次请求便会超时,难道不会在ip池中再选一个ip进行连接吗?
和DOWNLOAD_TIMEOUT的设置有关吗?

阅读 8.7k
3 个回答
新手上路,请多包涵

1200秒的时间太长了,

建议看看文档中settings的这个几个选项
RETRY_ENABLED
RETRY_HTTP_CODES
RETRY_TIMES

有可能是代理ip失效了,我一般在爬之前起一个进程,针对要爬的网站测代理ip能不能用,提供给scrapy,然后隔一段时间刷新一次,爬完了把这个进程停掉

新手上路,请多包涵

scrapy的 request.meta['proxy'] 代理轮转有bug,在抓取https网站时,配置多个代理是无效的,底层框架默认使用第一个成功连通的proxy。

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