我正在尝试使用Splash检索大量不同的网址。我在/ execute端点发布了一个如下所示的脚本:
local request_headers= {
["Accept-Encoding"] = "gzip, deflate, br",
["Accept-Language"] = "en-US,en;q=0.5",
["Cache-Control"] = "max-age=0",
["Upgrade-Insecure_Requests"] = "1",
["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
["DNT"] = "1",
["Host"] = "www.douban.com"
}
splash:go({
url="https://www.douban.com/people/sophiechou/",
headers = request_headers
})
return { ok=true, html=splash:html(), info=splash:har() }
必须将HAR返回到Splash服务器和最终目的地之间收到的真实标头。
所以,问题是我收到的HTML可能是压缩的。正如我从Splash那样理解的,当我返回哈希时,它会自动对JSON进行编码...哪个JSON编码二进制gzip,它实际上将它全部变成垃圾。
有时网站会返回HTML。有时,他们会返回Gzip或Defalte或BR。
为什么我不只是使用“身份”?我们发现的许多网站对身份都没有很好的反应,要么根本没有回复,要么返回Forbidden。更改编码既降低了浏览器占用空间的独特性,也降低了随机问题的数量。
除了我们无法阅读该页面。
似乎我们需要通过某种treat.as_binary(x)或者其他东西来检测和处理二进制文件(如果它在那里),但是文档对如何执行此操作非常了解。
这已经困扰了我好几个星期。救命!有什么想法吗?
P.S。链接到通过Splash Jupyter笔记本返回的html。 Link