hq:118⭐的轻量级 HTML 命令行处理器

在命令行处理 JSON 有 jq,处理 CSV 有 csvkit,那处理 HTML 呢?今天发现一个轻量级的小众工具 hq,用 CSS 选择器就能从网页中提取数据。

项目概览

属性内容
GitHubcoderobe/hq
Stars118
语言C++
许可证GPL-3.0
最后更新2025年3月

它解决了什么问题

写爬虫或者需要从网页提取数据时,常用的工具要么太重(Python + BeautifulSoup),要么功能单一(grep、awk 处理 HTML 很别扭)。

hq 的定位很简单:用 CSS 选择器在命令行处理 HTML,就像用 jq 处理 JSON 一样直观。

核心功能

hq 提供三种处理模式:

1. data 模式 - 提取原始 HTML

curl -s https://example.com | hq "div.article" data

返回匹配元素的完整 HTML,包括标签。

2. text 模式 - 提取纯文本

curl -s https://example.com | hq "h1" text

提取元素的内部文本内容。支持格式化选项:

  • plain - 纯文本(默认)
  • ansi - 带 ANSI 颜色
  • md - Markdown 格式

3. attr 模式 - 提取属性

curl -s https://example.com | hq "a" attr href

提取指定属性的值,比如获取所有链接的 URL。

使用示例

提取网页所有链接

curl -s https://news.ycombinator.com | hq "a.storylink" text

提取文章正文

curl -s https://example.com/blog/post | hq "article p" text plain

批量获取图片链接

curl -s https://example.com/gallery | hq "img" attr src

安装方式

从源码编译:

git clone https://github.com/coderobe/hq.git
cd hq
meson build && ninja -C build
# 编译后位于 build/hq

依赖:

  • meson(构建系统)
  • modest(HTML 解析库)

技术实现

hq 基于 Modest 库构建,这是一个高性能的 HTML 解析器。选择 C++ 实现保证了处理速度,适合管道操作和批量处理。

适用场景

  • 快速爬虫原型 - 不用写 Python,一行命令提取数据
  • 日志分析 - 处理 HTML 格式的日志或报告
  • 自动化测试 - 验证网页输出内容
  • 数据清洗 - 从 HTML 导出结构化数据

与同类工具对比

工具Stars特点
htmlq7.5kRust 实现,功能更丰富
pup8.2kGo 实现,语法类似 jq
hq118C++ 实现,极简设计

hq 的优势是简单直接:没有复杂的语法,三个模式覆盖常见需求,源码仅几百行,容易理解和修改。

使用注意

  1. CSS 选择器支持 - 基于 Modest,支持标准 CSS3 选择器
  2. 输入源 - 支持文件(-f)或标准输入,管道友好
  3. 输出分隔 - 默认换行分隔,可用 -d 自定义,-0 使用 null 字符(配合 xargs -0)

总结

hq 是一个小而精的工具,适合那些「只想快速提取点数据」的场景。不需要安装庞大的依赖,不需要写脚本,一个 CSS 选择器就能搞定。

对于日常需要处理 HTML 的开发者来说,值得收入工具箱。


项目信息

属性内容
仓库https://github.com/coderobe/hq
许可证GPL-3.0
语言C++
维护者@coderobe

文章发表于 gumi.ink