Scrapy和Splash超时特定网站

时间:2018-01-18 13:11:40

标签: python-3.x web-scraping scrapy scrapy-splash scrapinghub

在尝试此site的抓取响应时,我遇到ScrapyCrawleraSplash的问题。

我没有运气就尝试了以下内容:

  • Scrapy shell - 超时
  • Scrapy + Crawlera - 超时
  • Scrapinghub Splash实例(小) - 超时

但是我可以使用Selenium的Firefox webdriver抓取网站。但我希望摆脱这种情况,而是使用Splash

是否有解决方法来避免这些超时?

注意:

如果我使用由aquarium设置的本地Splash实例加载网站,但与Firefox网络驱动程序相比,它仍需要20秒以上的时间。

2 个答案:

答案 0 :(得分:0)

尝试增加Splash的超时时间。如果您使用Docker运行Splash,请将参数--max-timeout设置为更大的值,例如3600(有关详细信息,请查看documentation)。

接下来,在您的Splash请求中,也会增加超时。如果您使用scrapy-splash库,请将SplashRequest参数timeout设置为更高的值,例如3600。像这样:

yield scrapy_splash.SplashRequest(
        url, self.parse, endpoint='execute',
        args={'lua_source': script, 'timeout': 3600})

答案 1 :(得分:0)

您可以使用scrapy shell重试请求并在标头中设置用户代理。对我来说,使用这种方法就可以在几秒钟内完成工作。使用默认用户代理导致站点删除连接。默认用户代理声明您正在使用scrapy,因此站点会选择断开连接是有道理的。

替换自定义用户代理以匹配您自己的浏览器或首选用户代理和网址。您可以尝试使用以下步骤,然后在浏览器中查看响应:

mySql