用于检索站点的Splash脚本返回坏主体

时间:2018-06-13 22:37:07

标签: lua scrapy scrapy-splash

我正在尝试使用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

0 个答案:

没有答案