要提取简单网页内容,可以用 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 状态码,这对添加逻辑处理会带来麻烦。除了这点,其它都还好,暂时没发现什么问题,基本满足使用需求。