我想取消javascript加载网页,因此我使用scrapy-splash,但某些页面的加载时间很多。
我认为[processUser ..]事情变慢了。
有什么方法可以忽略504页?因为当我将超时设置为小于90时,会在刮擦的外壳或蜘蛛网中导致504网关错误。
,当我设置的时间结束时可以获取结果html代码(仅获取200)吗?
答案 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时:
不幸的是,Splash现在不支持任何用于阻止javascript请求的自定义规则-它仅占用页面,并且可以完成浏览器将执行的所有操作而没有任何附加组件:毫无疑问地加载所有内容。
话虽如此,这50倍的请求不太可能减慢您的页面加载速度,如果这样的话,这应该不会很大。