Web scraping 特定站点的刮擦和飞溅超时

Web scraping 特定站点的刮擦和飞溅超时,web-scraping,scrapy,scrapy-splash,scrapinghub,splash-js-render,Web Scraping,Scrapy,Scrapy Splash,Scrapinghub,Splash Js Render,我在尝试从中获取响应时遇到了Scrapy、Crawlera和Splash问题 我尝试了以下方法,但运气不佳: 纯Scrapyshell-超时 Scrapy+Crawlera-超时 ScrapinghubSplash实例(小)-超时 不过,我可以使用Selenium的Firefox Web驱动程序来抓取该站点。但我不想这样,而是想使用Splash 是否有避免这些超时的解决方法 注: 如果我使用由站点加载设置的本地Splash实例,尽管与Firefox webdriver的10秒相比仍然需要20

我在尝试从中获取响应时遇到了
Scrapy
Crawlera
Splash
问题

我尝试了以下方法,但运气不佳:

  • Scrapy
    shell-超时
  • Scrapy
    +
    Crawlera
    -超时
  • Scrapinghub
    Splash
    实例(小)-超时
不过,我可以使用
Selenium
的Firefox Web驱动程序来抓取该站点。但我不想这样,而是想使用
Splash

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

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

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

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

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

您可以使用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)

是的,我能做到,但我认为这不是正确的方法。当一个站点可以在3秒内加载时,我为什么要设置3600秒的超时?还有其他加速飞溅的方法吗?试一下,看看是否有帮助并解决问题。如果是这样的话,你可以考虑更好的方法。另外,看看我在答案中链接的文档,有一整节专门讨论这些问题。我似乎无法为Scrapinghub上托管的Splash实例设置最大超时。我也读了上千遍这些文件,但都没用。除此之外,我认为它在某种程度上与一些反刮解决方案有关,因为我不明白为什么Splash需要如此长的时间来呈现页面,也许网站有一些特定的防御措施。此外,我还使用了各种标题,如:User Agent、Referer,以获得不同的结果,但没有运气。我相信有一种方法,只需继续使用它们。当您尝试使用Splash web控制台呈现页面时,您可以看到计时。还有其他技巧,例如设置以加快渲染过程。谢谢您的回答。我已经尝试在Splash中设置自定义用户代理标题,但运气不好。但我会再检查一遍的!有什么对你有用吗?@DavidKong最后找到了一种方法,只使用请求而不使用无头浏览器。