首页 > 解决方案 > 用于检索站点的启动脚本返回错误的正文

问题描述

我正在尝试使用 Splash 检索许多不同的 URL。我正在向 /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 很可能是 gzip 压缩的。正如我从 Splash 中了解到的那样,当我返回哈希时,它会自动对其进行 JSON 编码...... JSON 对二进制 gzip 进行编码,这实际上将其全部变成了垃圾。

有时网站会返回 HTML。有时,他们会返回 Gzip 或 Defalte 或 BR。

为什么我不只是使用“身份”?我们发现的许多网站对身份的响应都不是很好,要么根本不响应,要么返回 Forbidden。更改编码既减少了浏览器占用空间的唯一性,也减少了随机问题的数量。

除了我们无法阅读该页面。

似乎我们需要通过某种treat.as_binary(x) 或其他方式检测并处理二进制文件(如果存在)。但是文档对如何执行此操作非常了解。

这让我困扰了好几个星期。帮助!有什么想法吗?

Ps 链接到通过 Splash Jupyter 笔记本返回的 html 的外观。 关联

标签: luascrapyscrapy-splash

解决方案


推荐阅读