วิธีแยกวิเคราะห์ HTML ใน Python

วิธีแยกวิเคราะห์ HTML ใน Python

Aspose.HTML FOSS สำหรับ Python ทำการแยกวิเคราะห์มาร์กอัปด้วยอัลกอริธึมการสร้างต้นไม้ตามมาตรฐาน: HTMLDocument.parse() สำหรับหน้าเต็ม, HTMLDocument.parse_fragment() สำหรับส่วนย่อย, และคลาสองค์ประกอบที่มีประเภท (HTMLElement และคลาสย่อยของมัน) ในผลลัพธ์ คู่มือนี้ครอบคลุมจุดเริ่มต้นการแยกวิเคราะห์และตรวจสอบผลลัพธ์ผ่าน DOM โดยใช้ pip เพื่อติดตั้ง.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น

from aspose_html.html_document import HTMLDocument
from aspose_html.dom import Document

ขั้นตอนที่ 3: เลือกจุดเริ่มต้นการแยกวิเคราะห์ที่เหมาะสม

HTMLDocument.parse() ทำการสร้างต้นไม้เอกสารเต็มด้วยการกู้คืนข้อผิดพลาดตามมาตรฐาน; HTMLDocument.parse_fragment() ใช้อัลกอริทึมส่วนย่อยสำหรับมาร์กอัปบางส่วน; HTMLDocument.load() อ่านจากแหล่งข้อมูล. ส่วนประกอบที่แยกวิเคราะห์จะมีประเภท — <a> คือ HTMLAnchorElement, <input> คือ HTMLInputElement.


ขั้นตอน 4: ตรวจสอบผลลัพธ์ผ่าน DOM

ผลลัพธ์ที่แยกวิเคราะห์คือโครงสร้างต้นไม้ DOM ปกติ — API การค้นหาและแอตทริบิวต์เดียวกันทำงาน. การสร้างโครงสร้างเทียบเท่าโดยโปรแกรมแสดงพื้นผิวที่ใช้ร่วมกัน:

doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "content")
doc.append_child(el)
print(doc.get_element_by_id("content").has_child_nodes())

ขั้นตอน 5: ดำเนินต่อด้วยสไตล์หรือโครงสร้าง

แนบสไตล์ชีตและอ่านสไตล์ที่คำนวณได้, หรือใช้ตัวช่วยการแทรก Element (insert_adjacent_html(), insert_adjacent_text()) สำหรับการแก้ไขเฉพาะตำแหน่ง — ผลลัพธ์การแยกวิเคราะห์จะป้อนข้อมูลให้ทุกชั้นอื่น.

ปัญหาทั่วไปและวิธีแก้

การทำเครื่องหมายบางส่วนจะเพิ่มตัวห่อ html และ body. parse() ใช้กฎระดับเอกสารเต็ม; ใช้ parse_fragment() สำหรับ snippets.

การทำเครื่องหมายที่ผิดรูปแบบจะถูกพาร์สโดยไม่มีข้อผิดพลาด. นั่นคือพฤติกรรมตามมาตรฐาน — การสร้างต้นไม้กำหนดการกู้คืนสำหรับทุกกรณีข้อผิดพลาดแทนการยกข้อผิดพลาด.

เนื้อหาในตารางปรากฏอยู่นอกตารางของมัน. การทำ foster parenting กับเนื้อหาตารางที่อยู่ผิดตำแหน่งเป็นส่วนหนึ่งของอัลกอริทึม; แก้ไขการจัดเรียงซ้อนของแหล่งที่มา.

คำถามที่พบบ่อย

องค์ประกอบที่พาร์สแล้วมีการกำหนดประเภทหรือไม่?

ใช่ — การพาร์สสร้างโครงสร้างชั้นลำดับ HTMLElement: ควบคุมฟอร์ม (HTMLFormElement, HTMLInputElement), เนื้อหาที่ฝังอยู่ (HTMLImageElement, HTMLCanvasElement), การนำทาง (HTMLAnchorElement), และอื่น ๆ.

ฉันสามารถควบคุมท่อการพาร์สในระดับที่ต่ำกว่าได้หรือไม่?

ใช่ — Tokenizer และ TreeBuilder เป็นสาธารณะ, โดยมี parse_html() เป็นตัวห่อเรียกครั้งเดียว.

การพาร์สดำเนินการสคริปต์หรือไม่?

No. การประเมินสคริปต์เป็นแบบชัดเจนและแยกจากกันผ่าน JSContext.

ดูเพิ่มเติม

 ภาษาไทย