Bash:
Analiza składniowa HTML
Jak to zrobić:
Bash nie jest pierwszym wyborem do parsowania HTML, ale można to zrobić przy użyciu narzędzi takich jak grep
, awk
, sed
lub zewnętrznych narzędzi takich jak lynx
. Dla większej niezawodności użyjemy xmllint
z pakietu libxml2
.
# Zainstaluj xmllint, jeśli jest to konieczne
sudo apt-get install libxml2-utils
# Przykładowy HTML
cat > sample.html <<EOF
<html>
<head>
<title>Przykładowa strona</title>
</head>
<body>
<h1>Witaj, Bash!</h1>
<p id="myPara">Bash może mnie przeczytać.</p>
</body>
</html>
EOF
# Parsuj tytuł
title=$(xmllint --html --xpath '//title/text()' sample.html 2>/dev/null)
echo "Tytuł to: $title"
# Wyciągnij akapit po ID
para=$(xmllint --html --xpath '//*[@id="myPara"]/text()' sample.html 2>/dev/null)
echo "Zawartość akapitu to: $para"
Wyjście:
Tytuł to: Przykładowa strona
Zawartość akapitu to: Bash może mnie przeczytać.
Głębsze zanurzenie
W przeszłości programiści używali narzędzi opartych na regex, takich jak grep
, do skanowania HTML, ale było to nieporęczne. HTML nie jest regularny - jest kontekstowy. Tradycyjne narzędzia nie zauważają tego i mogą być podatne na błędy.
Alternatywy? Sporo. Python z Beautiful Soup, PHP z DOMDocument, JavaScript z parserami DOM - języki z bibliotekami zaprojektowanymi, aby rozumieć strukturę HTML.
Użycie xmllint
w skryptach bash jest solidne do prostych zadań. Rozumie XML, a przez rozszerzenie XHTML. Regularny HTML może być jednak nieprzewidywalny. Nie zawsze podąża za ścisłymi zasadami XML. xmllint
zmusza HTML do działania w modelu XML, co dobrze sprawdza się dla dobrze sformułowanego HTML, ale może mieć problemy z bałaganem.
Zobacz też
- W3Schools - Parsowanie DOM HTML: Demistyfikacja DOM HTML.
- MDN Web Docs - Parsowanie i serializacja XML: Dla zasad parsowania XML, które mają zastosowanie do XHTML.
- Dokumentacja Beautiful Soup: Biblioteka Pythona do parsowania HTML.
- Dokumentacja libxml2: Szczegóły na temat
xmllint
i pokrewnych narzędzi XML.