本地用scrapy + splash调试的时候好好的,到了服务器上就奇慢无比,爆出来的错误是:
504 Gateway Time-out
这明显是在服务器上,splash渲染页面的时候超时了。
而且在服务器上用curl
,或者用浏览器访问,都是非常快的,就是走splash慢了。
导致这个问题的主要原因是:splash在下载某些资源的时候,花的时间太长了,这些资源可能是某个链接,也可能是某张图片、某个js文件或者css文件。
解决办法就是:
- 增加splash请求的超时时间
- 禁止splash下载图片
- 限制资源下载的时间,超过就断开,一般这不会影响页面DOM的下载
具体代码如下:
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url,
self.parse,
args={'wait': 0.5, 'viewport': '1024x2480', 'timeout': 90, 'images': 0, 'resource_timeout': 10},
)
参考地址: