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 每月下载量

MIT 许可证

25KB
397

hq

Crates.io

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