Scrapy超时和Twisted.Internet.Error

时间:2019-01-20 20:43:42

标签: python proxy scrapy twisted scrapy-spider

使用代理运行Scrapy,但有时在运行结束时爬网会遇到以下错误,并导致爬网完成时间延迟10秒钟以上。我该如何做,以便如果Scrapy在任何时候遇到这些错误,在被检测到时都会被完全忽略/立即通过,从而不会浪费时间使整个搜寻器停滞不前?

RETRY_ENABLED =假 (已经在settings.py中设置。)

请求中的网址列表。许多代理都设置为https://而不是http,但我想提到incase,尽管在大多数情况下https都可以使用,所以我怀疑这完全是关于设置https vs http。

但仍然得到:

错误1:

  • 2019-01-20 20:24:02 [scrapy.core.scraper]调试:从<200>报废
  • ------------花了8秒------------------
  • 2019-01-20 20:24:10 [scrapy.proxies]信息:删除失败的代理
  • 2019-01-20 20:24:10 [scrapy.core.scraper]错误:下载错误
  • 回溯(最近通话最近一次):
  • 文件“ /usr/local/lib64/python3.7/site-packages/scrapy/core/downloader/middleware.py”,第43行,在process_request中 defer.returnValue((yield download_func(request = request,spider = spider)))
  • scrapy.core.downloader.handlers.http11.TunnelError:无法使用代理ukimportantd2.fogldn.com:10492 [{'status':504,'reason':b'Gateway Time-out'}打开代理隧道

错误2:

  • 2019-01-20 20:15:46 [scrapy.proxies]信息:删除失败的代理
  • 2019-01-20 20:15:46 [scrapy.core.scraper]错误:下载错误
  • ------------花了12秒------------------
  • 2019-01-20 20:15:58 [scrapy.core.engine]信息:关闭蜘蛛(完成)
  • 回溯(最近通话最近一次):
  • 文件“ /usr/local/lib64/python3.7/site-packages/scrapy/core/downloader/middleware.py”,第43行,在process_request中 defer.returnValue((yield download_func(request = request,spider = spider)))
  • twisted.web._newclient.ResponseNeverReceived:[twisted.python.failure.Failure twisted.internet.error.ConnectionLost:与另一方的连接以一种非干净的方式丢失:连接丢失。]

错误3:

  • 回溯(最近通话最近一次):
  • 文件“ /usr/local/lib64/python3.7/site-packages/scrapy/core/downloader/middleware.py”,第43行,在process_request中 defer.returnValue((yield download_func(request = request,spider = spider)))
  • twisted.web._newclient.ResponseNeverReceived:[twisted.python.failure.Failure twisted.internet.error.ConnectionLost:与对方的连接丢失了。]

1 个答案:

答案 0 :(得分:0)

  

我如何做到这一点,以便在任何时候如果Scrapy遇到这些错误,它都会在被检测到时立即被完全忽略/传递

已经是事实了。代理可能是在几秒钟后而不是立即导致错误,或者直接超时。

如果您不愿意等待,可以考虑减少DOWNLOAD_TIMEOUT设置,但是原本需要很长时间但又需要工作的响应可能会开始超时。

更好的方法可能是切换到更好的代理服务器,或者考虑使用智能代理(例如Crawlera)。