在 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 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消