BeautifulSoup รองรับ parser หลายตัว สองตัวยอดนิยมคือ html5lib และ lxml มีพฤติกรรมต่างกัน
html5lib
- Pure Python implementation
- ปฏิบัติตาม WHATWG HTML Spec (เหมือน Browser)
- จัดการ Broken HTML ได้ดี เพิ่ม Tag ที่ขาดหายไปอัตโนมัติ
- ช้ากว่า lxml
lxml
- ขึ้นอยู่กับ C libraries (libxml2, libxslt)
- เร็วมาก เนื่องจากเป็น C extension
- เน้น XML structure ไม่ได้จำลอง browser behavior
- อาจลบ/แก้ไข Tag ที่ไม่ถูกต้อง
เปรียบเทียบพฤติกรรม
from bs4 import BeautifulSoup # HTML ที่เสีย:
ผลลัพธ์
เมื่อไหร่ควรใช้ตัวไหน?
| สถานการณ์ | Parser ที่แนะนำ |
|---|---|
| HTML จริงจากเว็บ (Messy, Broken) | html5lib |
| XML/HTML ที่สะอาด ต้องการความเร็ว | lxml |
| ไม่ต้องการ dependency ภายนอก | html5lib |
| Parsing ขนาดใหญ่ | lxml |
ตัวเลือกอื่น: html.parser (Built-in, ไม่ต้องติดเพิ่ม, กลางคู่)