Cách làm việc với DOM trong Python

Cách làm việc với DOM trong Python

Aspose.HTML FOSS cho các mô hình Python HTML như một DOM dựa trên tiêu chuẩn: Document tạo các nút, Element quản lý thuộc tính, và Node cung cấp các hoạt động cây. Hướng dẫn này xây dựng một cây nhỏ và đọc lại cấu trúc của nó, sử dụng pip để cài đặt.

Hướng dẫn từng bước

Bước 1: Cài đặt gói

Cài đặt gói:

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

Sau đó xác nhận siêu dữ liệu của gói:

pip show aspose-html-foss

Bước 2: Nhập các lớp cần thiết

from aspose_html.dom import Document

Bước 3: Tạo một Document và một Element

Document là nhà máy node; create_element() trả về một phần tử mới mà bạn gắn với append_child():

doc = Document()
el = doc.create_element("div")
doc.append_child(el)

Bước 4: Đặt Thuộc tính

set_attribute() ghi các thuộc tính markup; các lớp và id điều khiển việc khớp CSS sau này:

el.set_attribute("class", "foo")
el.set_attribute("id", "bar")

Bước 5: Đọc lại Cấu trúc

get_element_by_id() lấy lại phần tử, get_attribute() trả về các thuộc tính của nó, và has_child_nodes() xác nhận cấu trúc:

found = doc.get_element_by_id("bar")
print(found.get_attribute("class"))
print(doc.has_child_nodes())

Các vấn đề thường gặp và cách khắc phục

Tra cứu theo id không trả về gì. Thuộc tính của phần tử id phải được đặt trước khi get_element_by_id() được gọi, và phần tử phải được gắn vào cây tài liệu.

Đọc thuộc tính trả về các giá trị không mong đợi. get_attribute() trả về giá trị đã được thiết lập cuối cùng bằng set_attribute(); kiểm tra lỗi chính tả trong tên thuộc tính — chúng là chuỗi thuần.

Các nút được tạo từ tài liệu khác hoạt động không đúng. Các nút có phạm vi tài liệu. Tạo chúng thông qua cùng một Document, hoặc chuyển chúng bằng import_node()/adopt_node().

Câu hỏi thường gặp

Document có thể tạo các loại nút nào?

Các phần tử, nút văn bản, chú thích và đoạn tài liệu — thông qua create_element(), create_text_node(), create_comment(), và create_document_fragment().

Làm thế nào để di chuyển hoặc xóa các nút hiện có?

Sử dụng các thao tác Node: insert_before(), remove_child(), replace_child() và clone_node().

Tôi có thể phân tích markup hiện có thay vì tự xây dựng cây không?

Có — HTMLDocument.parse() cho các trang và HTMLDocument.parse_fragment() cho các đoạn mã tạo ra cùng một loại cây.

Xem thêm

 Tiếng Việt