Bash:
Разбор HTML
Как это сделать:
Bash не является основным инструментом для парсинга HTML, но это можно сделать с помощью таких инструментов как grep
, awk
, sed
, или внешних утилит, например, lynx
. Для надежности мы будем использовать xmllint
из пакета libxml2
.
# Установите xmllint при необходимости
sudo apt-get install libxml2-utils
# Пример HTML
cat > sample.html <<EOF
<html>
<head>
<title>Пример страницы</title>
</head>
<body>
<h1>Привет, Bash!</h1>
<p id="myPara">Bash может меня прочитать.</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"
Вывод:
Заголовок: Пример страницы
Содержимое параграфа: Bash может меня прочитать.
Глубже
В прошлые времена программисты использовали инструменты на основе регулярных выражений, такие как grep
, для сканирования HTML, но это было неудобно. HTML - это не регулярное выражение, он контекстный. Традиционные инструменты упускают это и могут быть подвержены ошибкам.
Альтернативы? Их предостаточно. Python с Beautiful Soup, PHP с DOMDocument, JavaScript с DOM парсерами — языки с библиотеками, предназначенными для понимания структуры HTML.
Использование xmllint
в bash-скриптах подходит для простых задач. Он понимает XML, и, соответственно, XHTML. Обычный HTML может быть непредсказуемым, ведь он не всегда следует строгим правилам XML. xmllint
принуждает HTML следовать модели XML, что хорошо работает для правильно сформированного HTML, но может спотыкаться на сложном содержимом.
См. также
- W3Schools - HTML DOM Parser: Разъясняет HTML DOM.
- MDN Web Docs - Парсинг и сериализация XML: О принципах парсинга XML, которые применимы к XHTML.
- Документация Beautiful Soup: Библиотека Python для парсинга HTML.
- Документация libxml2: Детали о
xmllint
и связанных инструментах XML.