Golang goquery怎么解析HTML_Golang goquery教程【核心】
goquery 不能直接解析本地文件或HTML字符串必须通过io.ReaderNewDocument仅支持URL传入文件路径会因协议错误失败正确做法是用os.ReadFile读取后经strings.NewReader转为Reader再调用NewDocumentFromReader。goquery 不能直接解析 HTML 字符串或文件路径必须先转成 *http.Response 或 io.Reader —— 这是绝大多数人卡住的第一步。为什么 doc, err : goquery.NewDocument(index.html) 总报错因为 NewDocument 只接受 URL会发起 HTTP 请求不接受本地文件路径或 HTML 字符串。它底层调用的是 http.Get所以传入 index.html 会被当成域名访问自然 DNS 失败。正确做法用 os.ReadFile 读取文件内容再用 goquery.NewDocumentFromReader常见错误把 ./index.html 直接塞进 NewDocument得到 Get ./index.html: unsupported protocol scheme 如果 HTML 来自网络响应确保 resp.Body 没被提前关闭或读取过 —— goquery 需要可重读的 io.ReaderhtmlData, _ : os.ReadFile(./index.html)doc, _ : goquery.NewDocumentFromReader(strings.NewReader(string(htmlData)))Find() 找不到元素检查选择器语法和文档加载状态goquery 的选择器基于 CSS但不支持所有浏览器级语法比如 :has()、:nth-child(2n)也不处理动态渲染内容 —— 它只解析静态 HTML DOM。确保 HTML 已完整加载如果从 http.Response 创建注意 Content-Type 是否为 text/html否则可能被当成纯文本解析Find(div.content) 匹配失败试试 Find(div).HasClass(content) 或打印 doc.Find(body).Html() 看实际结构嵌套查找别链式写错doc.Find(ul).Find(li) 和 doc.Find(ul li) 行为一致但 doc.Find(ul).Children(li) 只取直接子元素中文乱码或标签名变成小写设置正确的字符编码goquery 默认用 UTF-8 解析但如果 HTML 声明了 gbk 或 gb2312 却没转码就会出现文字乱码、属性丢失、甚至 Find 失效比如 class 属性读成空。 云从科技AI开放平台 云从AI开放平台