3

我在尝试从该站点Scrapy获取响应时遇到Crawlera了问题。Splash

我没有运气就尝试了以下方法:

  • Scrapy外壳 - 超时
  • Scrapy+ Crawlera- 超时
  • ScrapinghubSplash实例(小) - 超时

但是我可以使用Selenium. 但我想摆脱它并Splash改用它。

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

笔记:

如果我使用由水族馆Splash设置的本地实例,则站点会加载,尽管与 Firefox webdriver 的 10 秒相比,它仍然需要 20 多秒。

4

2 回答 2

0

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

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

scrapy shell
url = "https://www.yoururl.com"
request = scrapy.Request(url, headers={'User-Agent': 'custom user agent'})
fetch(request)
view(response)
于 2018-01-20T16:04:09.157 回答
0

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

接下来,在您的 Splash 请求中,还要创建超时。如果您使用scrapy-splash库,则将SplashRequest参数设置timeout为更高的值,例如3600. 像这样:

yield scrapy_splash.SplashRequest(
        url, self.parse, endpoint='execute',
        args={'lua_source': script, 'timeout': 3600})
于 2018-01-18T13:18:04.283 回答