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 สามารถอ่านฉันได้.

วิเคราะห์ลึก

ในอดีต, โปรแกรมเมอร์ใช้เครื่องมือที่ใช้ regex อย่าง grep เพื่อสแกน HTML, แต่วิธีนี้ค่อนข้างยุ่งยาก HTML ไม่ใช่ภาษาที่ตายตัว—มันเป็นภาษาตามบริบท เครื่องมือดั้งเดิมพลาดเรื่องนี้และอาจมีความผิดพลาดได้

มีทางเลือกอื่นหรือ? มากมาย เช่น Python กับ Beautiful Soup, PHP กับ DOMDocument, JavaScript กับ DOM parsers—ภาษาเหล่านี้มีไลบรารีที่ออกแบบมาเพื่อเข้าใจโครงสร้างของ HTML

การใช้ xmllint ในสคริปต์ bash เหมาะสำหรับงานง่ายๆ มันเข้าใจ XML, และโดยการขยาย, XHTML แต่ HTML ปกติอาจไม่คาดเดาได้ มันไม่เสมอไปตามกฎเคร่งครัดของ XML xmllint บังคับให้ HTML เข้าไปอยู่ในโมเดล XML ซึ่งทำงานได้ดีกับ HTML ที่มีโครงสร้างดี แต่อาจมีปัญหากับ HTML ที่ไม่เป็นระเบียบ

ดูเพิ่มเติม