在 GO 中,我使用 HTTP 请求来获取站点 html,我发现某些元素与在 Chrome 中使用 Inspect 时有所不同。在 google 中的搜索和一些阅读使我了解到,我在 Inspect 中看到的是一个名为 DOM 的阶段,它采用原始 html 并运行一些添加信息和更改元素的 java 脚本(对我来说,我是新手) ^_^)。为什么我可以在 GO 中接收 DOM 而不是原始 html?我知道我可以使用 Chromedp,但我希望有一些更像某种 HTTP 包的东西,因为 Chromedp 对性能有点重。我真的很感激任何建议,谢谢。
2 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
一个简单的 HTTP 请求(通过 Go 或其他任何方式)只能获取原始 HTML。DOM 是浏览器生成的对原始 HTML 的解释。是的,甚至还有像Shadow DOM这样的东西。
JavaScript 由浏览器的 JavaScript 引擎解释,该引擎将更改应用于 DOM、添加事件侦听器并动态操作所述 DOM。
这就是为什么你无法通过 HTTP 请求获取在浏览器中看到的 DOM 状态。该请求不包含通过浏览器的 JavaScript 引擎完成的所有客户端 DOM 操作。请求库不是浏览器。
为了访问您习惯在开发人员工具中看到的完整渲染的 DOM,您将需要更复杂的 Web 抓取设置,通常涉及无头浏览器,例如Puppeteer。然而,这是用 Node.js 编写的。考虑到 Go,您可能会更好地使用chromedp或cdp。
慕无忌1623718
TA贡献1744条经验 获得超4个赞
DOM 代表“文档对象模型”,它是一个节点树,其中每个节点代表底层文档的一个元素。节点可能对应于元素、文本、注释等。周围有许多基于 go 的 DOM 包。
它允许您解析 HTML,并以编程方式遍历文档的元素。
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消