全部章节21
本页目录

HHY 扩展 · 当前版本 v1.7.1

HTML 扩展与抓取框架

用官方 HTML 扩展和安全 Frontier 完成 URL 规范化、链接发现、递归去重及有界静态抓取。

HTML 扩展是什么

官方 html 0.2.0 是一个无网络、无文件副作用的进程扩展。它用 Lexbor 解析不可信 HTML、执行 CSS Selector,并通过 extract_report 返回批量记录和明确的截断元数据。

构建与安装 HTML 扩展

sh
brew install jansson lexbor
make -C extensions/html
./build/hhy install ./extensions/html
./build/hhy list
完整签名用途
html.text(String html, String selector, Map?) -> String?读取首个节点的规范化文本
html.text_all(String html, String selector, Map?) -> List<String>读取全部匹配节点的文本
html.attr(String html, String selector, String name, Map?) -> String?读取首个节点的属性
html.attr_all(String html, String selector, String name, Map?) -> List<String>读取全部匹配节点的属性
html.exists(String html, String selector) -> Bool判断 Selector 是否命中
html.extract(String html, String selector, Map schema, Map?) -> List<Map>一次解析文档,并按 schema 投影重复记录
选项适用方法行为
trim: Booltext、text_all、attr、attr_all是否清理首尾空白,默认开启
max_results: Inttext_all、attr_all、extract默认 1000,硬上限 10000

扩展把输入限制在 768 KiB,以便协议消息始终有界。extract 的 schema 字段使用 { selector, value: "text" } 或 { selector, value: "attr", name };空 selector 表示读取当前 root。它不返回 DOM handle:Protocol 1 只运输 JSON 可表达的值,因此 html.extract 在扩展内一次完成解析和字段投影。

从 HTML 扩展到安全爬虫框架

静态 Spider 把多个职责组合成闭环:Runtime 的 url_resolve 规范化并解析相对 URL;HTML 扩展发现链接;按深度推进的 Frontier 在入队前检查域名、路径、页面数、队列大小和请求指纹;HTTP 网络层在实际连接地址上阻止 SSRF。

能力当前实现程度
url_resolve(url, base?)返回 url、scheme、host、port、path、query 与稳定 fingerprint
链接发现follow_selector 提取 href,逐层加入 Frontier
Frontier 与去重按深度、有界并发;规范 URL 指纹在入队前去重
边界限制allowed_domains、path prefixes、max_depth/pages/frontier/links
SSRF 防护在每次实际 socket 连接时阻止 loopback、私网及 link-local,覆盖重定向

适用范围与明确边界

当前支持内存或原子 checkpoint Frontier、严格配置匹配的断点恢复,以及 send_to 流式响应文件。可选 Playwright Renderer 能执行 JavaScript;它与无副作用的 Lexbor HTML 扩展隔离,并对主文档、重定向和子资源执行域名与 DNS 私网检查。