Shell 使用 pup 以 CSS 选择器方式提取网页内容

Eric 杂记 190 次浏览 抢沙发

要提取简单网页内容,可以用 sed awk 命令,通过正则匹配提取。如果内容比较复杂的,最好选择 HTML 解释器来做。这里推荐一个,名叫 pup,它基于 CSS 选择器匹配内容,安装和使用都非常简单。

pup 安装

pup 用 go 语言写成,安装只需下载编译好的执行文件放入 /usr/local/bin 目录即可。

cd /usr/local/bin
wget https://github.com/ericchiang/pup/releases/download/v0.4.0/pup_v0.4.0_linux_amd64.zip
unzip pup_v0.4.0_linux_amd64.zip && rm -f pup_v0.4.0_linux_amd64.zip

之后运行 pup --help 测试是否命令是否可用。

pup 使用

举个简单示例。例如这是需要提取内容的 test.html 文件。

<!DOCTYPE html>
<html>
<body>

<h1>The a element</h1>

<a href="https://www.hostarr.com">主机指南</a>

</body>
</html>

提取 h1 标签内容(如果不加 text{} 则提取整个 HTML 标签)。

cat test.html | pup 'body > h1 text{}'

提取 a 标签链接(也可以用此方法提取其它 HTML 标签属性)。

cat test.html | pup 'body > a attr{href}'

匹配更多复杂内容,需要配合 CSS3 选择器,具体可看 GitHub 项目页说明。

如果将 pup 用于 Shell 脚本,发现其存在一个问题。pup 没有错误状态码返回,无论是否匹配到内容都会返回 0 状态码,这对添加逻辑处理会带来麻烦。除了这点,其它都还好,暂时没发现什么问题,基本满足使用需求。

发表评论

电邮地址用于 Gravatar 头像显示,不会被公开可见。