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"
# חילוץ פסקה לפי מזהה
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 רגיל יכול להיות לא צפוי, עם זאת. הוא לא תמיד עוקב אחרי כללי ה-XLM המחמירים. xmllint
כופה על HTML להתאמץ למודל של XML, דבר שעובד היטב עבור HTML מסודר היטב, אך עלול להיתקל בבעיות עם קוד לא מסודר.
ראה גם
- W3Schools - HTML DOM Parser: מפשט את HTML DOM.
- MDN Web Docs - ניתוח ושרשור XML: לעקרונות ניתוח של XML החלים גם על XHTML.
- מסמכי Beautiful Soup: ספרייה של Python לניתוח HTML.
- מסמכי libxml2: פרטים על
xmllint
וכלים נוספים של XML.