Bash:
HTML parsen

Wie:

Bash ist nicht die erste Wahl zum Parsen von HTML, aber es kann mit Werkzeugen wie grep, awk, sed oder externen Dienstprogrammen wie lynx durchgeführt werden. Für Robustheit verwenden wir xmllint aus dem libxml2 Paket.

# Installiere xmllint, falls nötig
sudo apt-get install libxml2-utils

# Beispiel HTML
cat > sample.html <<EOF
<html>
<head>
  <title>Beispielseite</title>
</head>
<body>
  <h1>Hallo, Bash!</h1>
  <p id="myPara">Bash kann mich lesen.</p>
</body>
</html>
EOF

# Den Titel parsen
title=$(xmllint --html --xpath '//title/text()' sample.html 2>/dev/null)
echo "Der Titel ist: $title"

# Absatz nach ID extrahieren
para=$(xmllint --html --xpath '//*[@id="myPara"]/text()' sample.html 2>/dev/null)
echo "Der Absatzinhalt ist: $para"

Ausgabe:

Der Titel ist: Beispielseite
Der Absatzinhalt ist: Bash kann mich lesen.

Vertiefung

Früher verwendeten Programmierer regex-basierte Tools wie grep zum Scannen von HTML, aber das war umständlich. HTML ist nicht regulär – es ist kontextuell. Traditionelle Werkzeuge verpassen dies und können fehleranfällig sein.

Alternativen? Genug. Python mit Beautiful Soup, PHP mit DOMDocument, JavaScript mit DOM-Parsern – Sprachen mit Bibliotheken, die darauf ausgelegt sind, die Struktur von HTML zu verstehen.

Die Verwendung von xmllint in Bash-Skripten ist fest für einfache Aufgaben. Es versteht XML und somit auch XHTML. Reguläres HTML kann jedoch unvorhersehbar sein. Es folgt nicht immer den strengen Regeln von XML. xmllint zwingt HTML in ein XML-Modell, was gut für wohlgeformtes HTML funktioniert, aber bei unordentlichem Material ins Straucheln geraten kann.

Siehe auch