Bash:
解析HTML
如何操作:
Bash 不是解析 HTML 的首选工具,但可以使用像 grep
、awk
、sed
或外部工具如 lynx
。为了增强鲁棒性,我们将使用 libxml2
包中的 xmllint
。
# 如有必要,安装 xmllint
sudo apt-get install libxml2-utils
# 示例 HTML
cat > sample.html <<EOF
<html>
<head>
<title>示例页面</title>
</head>
<body>
<h1>你好,Bash!</h1>
<p id="myPara">Bash 可以读取我。</p>
</body>
</html>
EOF
# 解析标题
title=$(xmllint --html --xpath '//title/text()' sample.html 2>/dev/null)
echo "标题是:$title"
# 通过 ID 提取段落
para=$(xmllint --html --xpath '//*[@id="myPara"]/text()' sample.html 2>/dev/null)
echo "段落内容是:$para"
输出:
标题是:示例页面
段落内容是:Bash 可以读取我。
深入探讨
在过去,程序员使用基于正则表达式的工具,如 grep
来扫描 HTML,但这很笨拙。HTML 不是规则的——它是上下文的。传统工具错过了这一点,可能会出错。
有替代方案吗?很多。Python 与 Beautiful Soup、PHP 与 DOMDocument、JavaScript 与 DOM 解析器——设计有理解 HTML 结构的库的语言。
在 bash 脚本中使用 xmllint
对于简单任务是可靠的。它理解 XML,以及通过扩展,XHTML。然而,常规 HTML 可能是不可预测的。它不总是遵循 XML 的严格规则。xmllint
将 HTML 强制进入 XML 模型,这对于格式良好的 HTML 很有效,但可能会在杂乱的内容上遇到问题。
另请参阅
- W3Schools - HTML DOM 解析器:解密 HTML DOM。
- MDN Web Docs - 解析和序列化 XML:适用于 XHTML 的 XML 解析原则。
- Beautiful Soup 文档:一个用于 HTML 解析的 Python 库。
- libxml2 文档:关于
xmllint
及相关 XML 工具的详情。