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
的第一个元素的兄弟元素。
示例
完整的Hacker News故事提取
{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": "..."
}
}
]
}