8 个版本 (稳定)
1.2.2 | 2023 年 11 月 29 日 |
---|---|
1.2.1 | 2023 年 11 月 8 日 |
1.1.0 | 2023 年 4 月 14 日 |
1.0.1 | 2023 年 3 月 10 日 |
0.1.0 | 2022 年 12 月 3 日 |
#4 in #css-selectors
36 每月下载量
25KB
397 行
hq
jq,但用于 HTML。 在此浏览器中尝试
hq
读取 HTML 并根据一系列 CSS 选择器将其转换为 JSON 对象。选择器以类似于 JSON 的方式表达,但值是 CSS 选择器。例如
{posts: .athing | [ {title: .titleline > a, url: .titleline > a | @(href)} ] }
这将选择所有 .athing
元素,并为每个选定的元素创建一个对象数组 (| [{...}]
)。然后对于每个元素,它将选择 titleline > a
元素的文本以及 href
属性 (| @(href)
)。
最终结果是以下结构
{
"posts": [
{
"title": "...",
"url": "..."
}
]
}
安装
brew install hq
,或 cargo install html-query
特殊查询语法
文本
.foo| @text
这将选择与 .foo
匹配的第一个元素的文本内容。
选择属性
.foo| @(href)
这将选择与 .foo
匹配的第一个元素的 href
属性。
父元素
.foo| @parent
这将返回与 .foo
匹配的第一个元素的父元素。
兄弟元素
.foo| @sibling(1)
这将返回与 .foo
匹配的第一个元素的兄弟元素。
示例
完整黑客新闻故事提取
{posts: .athing | [{href: .titleline > a | @(href), title: .titleline > a, meta: @sibling(1) | {user: .hnuser, posted: .age | @(title) }}]}
这选择每个 .athing
元素,从 href
属性中提取 URL 以及标题。然后选择 兄弟 .athing
元素,并从该元素中提取用户和发帖时间
{
"posts": [
{
"title": "...",
"url": "...",
"meta": {
"posted": "...",
"user": "..."
}
}
]
}
依赖项
~8–13MB
~169K SLoC