hq:118⭐的轻量级 HTML 命令行处理器
hq:118⭐的轻量级 HTML 命令行处理器
在命令行处理 JSON 有 jq,处理 CSV 有 csvkit,那处理 HTML 呢?今天发现一个轻量级的小众工具 hq,用 CSS 选择器就能从网页中提取数据。
项目概览
| 属性 | 内容 |
|---|---|
| GitHub | coderobe/hq |
| Stars | 118 |
| 语言 | 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 | 特点 |
|---|---|---|
| htmlq | 7.5k | Rust 实现,功能更丰富 |
| pup | 8.2k | Go 实现,语法类似 jq |
| hq | 118 | C++ 实现,极简设计 |
hq 的优势是简单直接:没有复杂的语法,三个模式覆盖常见需求,源码仅几百行,容易理解和修改。
使用注意
- CSS 选择器支持 - 基于 Modest,支持标准 CSS3 选择器
- 输入源 - 支持文件(
-f)或标准输入,管道友好 - 输出分隔 - 默认换行分隔,可用
-d自定义,-0使用 null 字符(配合 xargs -0)
总结
hq 是一个小而精的工具,适合那些「只想快速提取点数据」的场景。不需要安装庞大的依赖,不需要写脚本,一个 CSS 选择器就能搞定。
对于日常需要处理 HTML 的开发者来说,值得收入工具箱。
项目信息
| 属性 | 内容 |
|---|---|
| 仓库 | https://github.com/coderobe/hq |
| 许可证 | GPL-3.0 |
| 语言 | C++ |
| 维护者 | @coderobe |
文章发表于 gumi.ink