Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

html5lib และ lxml Parsers ใน Python (BeautifulSoup)

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 ที่เสีย: 
  • (li ไม่อยู่ใน ul/ol, p ปิดโดยไม่มีเปิด) html = "
  • " # html5lib: สร้างโครงสร้างสมบูรณ์ soup1 = BeautifulSoup(html, "html5lib") print(soup1) #
  • # lxml: ตัด tag ที่ไม่ถูกต้อง soup2 = BeautifulSoup(html, "lxml") print(soup2) #
  • ผลลัพธ์

  • เมื่อไหร่ควรใช้ตัวไหน?

    สถานการณ์Parser ที่แนะนำ
    HTML จริงจากเว็บ (Messy, Broken)html5lib
    XML/HTML ที่สะอาด ต้องการความเร็วlxml
    ไม่ต้องการ dependency ภายนอกhtml5lib
    Parsing ขนาดใหญ่lxml

    ตัวเลือกอื่น: html.parser (Built-in, ไม่ต้องติดเพิ่ม, กลางคู่)