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-fossBước 2: Nhập các lớp cần thiết
from aspose_html.dom import DocumentBướ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.