scrapy-splash可以忽略504 HTTP状态吗?

时间:2018-09-18 03:18:03

标签: scrapy scrapy-splash

我想取消javascript加载网页,因此我使用scrapy-splash,但某些页面的加载时间很多。

像这样: enter image description here

我认为[processUser ..]事情变慢了。

有什么方法可以忽略504页?因为当我将超时设置为小于90时,会在刮擦的外壳或蜘蛛网中导致504网关错误。

,当我设置的时间结束时可以获取结果html代码(仅获取200)吗?

2 个答案:

答案 0 :(得分:1)

splash中有一种机制可以在请求开始加载正文之前中止请求,您可以使用splash:on_response_headers hook来利用它。但是,在您的情况下,此挂钩仅在状态和标头进入时(即在它完成等待网关超时之后)才能捕获并中止该页面(504)。因此,相反,您可能希望splash:on_request hook在请求发送之前就中止请求

function main(splash, args)
    splash:on_request(function(request)
        if request.url:find('processUser') then
            request:abort()
        end
    end)
    assert(splash:go(args.url))
    assert(splash:wait(.5))
    return {
        har = splash:har(),
    }
end

UPD:另一种可能更好的方法是在发生任何请求之前设置splash.resource_timeout

function main(splash, args)
    splash.resource_timeout = 3
    ...

答案 1 :(得分:0)

使用Splash渲染网页时,基本上是在使用Web浏览器。

当您要求Splash渲染http://example.com时:

  1. 飞溅到http://example.com
  2. Splash执行所有javascript
    2.1 javascript发出了一些请求
    2.2一些请求返回50个代码
  3. 启动返回页面数据

不幸的是,Splash现在不支持任何用于阻止javascript请求的自定义规则-它仅占用页面,并且可以完成浏览器将执行的所有操作而没有任何附加组件:毫无疑问地加载所有内容。

话虽如此,这50倍的请求不太可能减慢您的页面加载速度,如果这样的话,这应该不会很大。