scrapy-splash 可以忽略 504 HTTP 状态吗?
Can scrapy-splash Ignore 504 HTTP Status?
我想废弃 javascript 加载网页,所以我使用 scrapy-splash 但是有些页面加载时间太长了。
像这样:
我认为 [processUser..] 事情会变慢。
有什么方法可以忽略那 504 页?因为当我设置超时小于 90 时,会导致 scrapy shell 或 spiders.
出现 504 网关错误
我设置的时间结束后可以得到结果html代码(只得到200)?
当您使用 Splash 呈现网页时,您基本上是在使用网络浏览器。
当您要求 Splash 渲染时 http://example.com:
- 飞溅转到 http://example.com
- Splash 执行所有 javascript
2.1 javascript 提出一些要求
2.2 一些请求 return 50x 代码
- Splash returns 页面数据
不幸的是,Splash 现在不支持任何用于阻止 javascript 请求的自定义规则 - 它只获取页面并执行您的浏览器在没有任何插件的情况下可以执行的所有操作:毫无疑问地加载所有内容。
综上所述,那些 50 倍的请求不太可能会减慢您的页面加载速度,如果是的话,应该不会有太大的影响。
splash 中有一种机制可以在开始加载正文之前中止请求,您可以利用 splash:on_response_headers
hook. However in your case this hook will only be able to catch and abort the page when the status and the headers are in, and that is after it finishes waiting for the gateway timeout (504). So instead you might want 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
...
我想废弃 javascript 加载网页,所以我使用 scrapy-splash 但是有些页面加载时间太长了。
像这样:
我认为 [processUser..] 事情会变慢。
有什么方法可以忽略那 504 页?因为当我设置超时小于 90 时,会导致 scrapy shell 或 spiders.
出现 504 网关错误我设置的时间结束后可以得到结果html代码(只得到200)?
当您使用 Splash 呈现网页时,您基本上是在使用网络浏览器。
当您要求 Splash 渲染时 http://example.com:
- 飞溅转到 http://example.com
- Splash 执行所有 javascript
2.1 javascript 提出一些要求
2.2 一些请求 return 50x 代码 - Splash returns 页面数据
不幸的是,Splash 现在不支持任何用于阻止 javascript 请求的自定义规则 - 它只获取页面并执行您的浏览器在没有任何插件的情况下可以执行的所有操作:毫无疑问地加载所有内容。
综上所述,那些 50 倍的请求不太可能会减慢您的页面加载速度,如果是的话,应该不会有太大的影响。
splash 中有一种机制可以在开始加载正文之前中止请求,您可以利用 splash:on_response_headers
hook. However in your case this hook will only be able to catch and abort the page when the status and the headers are in, and that is after it finishes waiting for the gateway timeout (504). So instead you might want 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
...