2017-05-22 39 views
0

我试图使用Scrapy飞溅的render.png端点采取以下网址的截图:以某URL的截图与飞溅

https://www.laithwaites.co.uk/product/Kilikanoon-Baroota-Shiraz-2014/66877 

在实践中我就与python-requests的要求,但是,即使当我在浏览器中进行测试时,它会将CPU使用率提高到100%以上(由“顶部”测量),挂起很长时间,最终导致Splash崩溃。我猜这是内存不足。

我试过增加maxrss从500到1500,但这没有帮助。我也尝试调整render.png端点的等待/超时参数,但没有改变结果。

如何使用Splash截取此页面的截图?

回答

0

这似乎是JS引擎的一些问题。你至少可以得到一个屏幕截图,如果你把JS关闭:

import requests 

script = """ 
function main(splash) 
    local url = splash.args.url 
    splash.js_enabled = false 
    assert(splash:go(url)) 
    return splash:png() 
end 
""" 

resp = requests.post('http://localhost:8050/execute', json={ 
    'lua_source': script, 
    'url': '<url>', 
}) 

如果您启用详细日志记录(docker run -it -p8050:8050 scrapinghub/splash -v3),你可以看到飞溅下载从CloudFront的一些fetch.js文件后挂起。可能它包含了一些使Splash挂起的代码。您可以尝试过滤掉这个文件(中止它的下载),而不是禁用JS:

function main(splash) 
    local url = splash.args.url 
    splash:on_request(function (req) 
    if req.url:find('fetch.js') ~= nil then 
     req.abort() 
    end 
    end) 
    assert(splash:go(url)) 
    return splash:png() 
end 

上面的脚本适用于我。