Bash:
HTMLの解析
方法:
HTMLをパースするためにBashが最初に思い浮かぶものではありませんが、grep
、awk
、sed
や外部ユーティリティlynx
のようなツールを利用して行うことができます。ロバストさを求めるならば、libxml2
パッケージからxmllint
を使用します。
# 必要であれば xmllint をインストール
sudo apt-get install libxml2-utils
# サンプル HTML
cat > sample.html <<EOF
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<h1>Hello, Bash!</h1>
<p id="myPara">Bash can read me.</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"
出力:
タイトルは: Sample Page
段落の内容は: Bash can read me.
深堀り
昔、プログラマーはgrep
のような正規表現ベースのツールを使ってHTMLをスキャンしていましたが、それは不格好でした。HTMLは規則正しくなく、文脈に依存しています。伝統的なツールはこれを見落とし、エラーが発生しやすいです。
代替手段は? 多数あります。Beautiful Soupを使ったPython、DOMDocumentを使ったPHP、DOMパーサーを使ったJavaScript—HTMLの構造を理解するように設計されたライブラリを持つ言語です。
bashスクリプトでのxmllint
の使用は、単純な作業には確かです。XMLを理解し、その延長でXHTMLを理解します。ただし、通常のHTMLは予測不可能な場合があります。XMLの厳格なルールには常に従わないためです。xmllint
はHTMLをXMLモデルに強制することで、形式が整っているHTMLにはうまく機能しますが、乱雑なものについては躓く可能性があります。
参照
- W3Schools - HTML DOM Parser: HTML DOMを解説。
- MDN Web Docs - XMLのパースとシリアライズ: XHTMLに適用されるXMLパースの原則について。
- Beautiful Soup Documentation: HTMLパースを行うPythonライブラリ。
- libxml2 Documentation:
xmllint
および関連するXMLツールに関する詳細。