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 ที่ไม่เป็นระเบียบ
ดูเพิ่มเติม
- W3Schools - HTML DOM Parser: ช่วยให้เข้าใจ HTML DOM
- MDN Web Docs - Parsing and serializing XML: สำหรับหลักการแยกส่วน XML ที่ใช้กับ XHTML
- Beautiful Soup Documentation: ไลบรารีของ Python สำหรับการแยกส่วน HTML
- libxml2 Documentation: รายละเอียดเกี่ยวกับ
xmllint
และเครื่องมือ XML ที่เกี่ยวข้อง