Golang goquery怎么解析HTML_Golang goquery教程【核心】

goquery 不能直接解析本地文件或HTML字符串,必须通过io.Reader;NewDocument仅支持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开放平台

相关推荐
蓝速科技5 分钟前
会议室门牌签到功能选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
Y幽谷客8 小时前
Python加载本地大模型(Qwen3.5 8B)
python·大模型
此时不提桶,更待何时9 小时前
01-04-B-垃圾回收面试与生产事故实战
java·jvm·面试
伞伞悦读9 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
线上放牧人9 小时前
Windows删除图标缓存
windows·python·pyqt
Hrain-AI9 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
qq_54702617910 小时前
Python 变量和简单数据类型
python
净水深流10 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t10 小时前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
智搜广告11 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo