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 מסודר היטב, אך עלול להיתקל בבעיות עם קוד לא מסודר.

ראה גם