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
- W3Schools - HTML DOM Parser: Demystifiziert HTML DOM.
- MDN Web Docs - Parsen und Serialisieren von XML: Für XML-Parsing-Prinzipien, die für XHTML gelten.
- Beautiful Soup Dokumentation: Eine Python-Bibliothek für das Parsen von HTML.
- libxml2 Dokumentation: Details zu
xmllint
und verwandten XML-Werkzeugen.