SuperAPI AI 工具集

goquery-parsing

前端与建站

查看项目

更新于 10-16 07:24

技能介绍

用途:从 HTML 快照生成 Go 解析器,目标是可靠提取目标数据,并在页面改版或小幅调整标记后继续可用。完整 API 方法签名见 references/api.md(资料未提供其内容)。

工作流:先通读整个 HTML 快照再写选择器;定义承载输出的 Go 结构体;按稳定性层级挑选选择器;按给定代码结构写解析器;最后编译并对照快照测试、检查边界情况。

选择器稳定性(由高到低):语义化 data 属性(如 [data-product-id]、[data-testid="price"]);ID;ARIA/role 属性;语义化 HTML 元素(article、time[datetime]、main、nav);有意义的类名;结构性属性组合(a[href^="/product/"]、img[alt]);标签加结构(article h2)仅作最后手段。应避免工具类/位置类(mt-4、flex、col-md-6)、可变长度列表上的 :nth-child()、超过三层的深层后代链,以及 .Next().Next().Find() 这类链式遍历;若只能用第七级,需注释说明后续应关注的属性。

代码结构:结构体按实体而非页面命名,字段保持调用方所需最小集合,可选字段以空字符串表示(除非存在与否确实重要)。解析函数接受 io.Reader,由调用方控制来源(文件、HTTP 响应、字符串、测试夹具),零结果时返回描述性错误而非静默返回空切片。重复模式抽成辅助函数,如 text(s, selector) 用 strings.TrimSpace 与 First() 取首个匹配的文本。单项解析用 Find().First(),并用 .Length()==0 判断未命中并报错。

抽取模式:文本一律 strings.TrimSpace;多段正文逐段收集(跳过空段)后用两个换行连接。属性用 Attr 的 (string, bool) 判断是否存在,或用 AttrOr 给默认值。日期优先取 time 元素的 datetime 属性。链接需在抽取后自行拼接 baseURL,因为 goquery 返回原始 href。表格逐行抽取,单元格少于预期时跳过该行。

回退选择器:可用逗号在同一次 Find 中并列多个候选,或按优先级依次查找并取首个非空结果。

自检:在 _test.go 中读取 testdata/ 下的 HTML 快照,断言关键字段非空,使未来页面改动导致选择器失效时测试失败。

常见错误:对多元素选择调用 .Text() 会拼接全部文本,应改用 .First() 或 .Eq(i);忽略 Attr 的布尔值;选择器指向容器而非值,应在 Each 内用 Find 限定范围;按表现层类名选择;零结果返回空切片而非错误;在解析器内部发起网络请求(应保持接收 io.Reader,由调用方获取)。

限制:本技能聚焦 Go 与 goquery;未提供许可证、安装命令、价格、支持平台等信息。