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ż