Jak pracować z DOM w Python
Aspose.HTML FOSS dla modeli Python HTML jako standardowy DOM: Document tworzy węzły, Element zarządza atrybutami, a Node dostarcza operacje na drzewie. Ten przewodnik buduje małe drzewo i odczytuje jego strukturę, używając pip do instalacji.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Zainstaluj pakiet:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Następnie potwierdź metadane pakietu:
pip show aspose-html-fossKrok 2: Importuj wymagane klasy
from aspose_html.dom import DocumentKrok 3: Utwórz dokument i element
Document jest fabryką węzłów; create_element() zwraca nowy element, który dołączasz za pomocą append_child():
doc = Document()
el = doc.create_element("div")
doc.append_child(el)Krok 4: Ustaw atrybuty
set_attribute() zapisuje atrybuty znaczników; klasy i identyfikatory sterują późniejszym dopasowywaniem CSS:
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")Krok 5: Odczytaj strukturę z powrotem
get_element_by_id() pobiera element, get_attribute() zwraca jego atrybuty, a has_child_nodes() potwierdza strukturę:
found = doc.get_element_by_id("bar")
print(found.get_attribute("class"))
print(doc.has_child_nodes())Typowe problemy i rozwiązania
Wyszukiwanie po identyfikatorze nie zwraca nic. Elementu id atrybut musi być ustawiony przed get_element_by_id() jest wywoływany, a element musi być podłączony do drzewa dokumentu.
Odczyty atrybutów zwracają nieoczekiwane wartości. get_attribute() zwraca to, co ostatnio ustawiono przy użyciu set_attribute(); sprawdź literówki w nazwach atrybutów — są to zwykłe ciągi znaków.
Węzły utworzone z innego dokumentu zachowują się nieprawidłowo. Węzły są ograniczone do dokumentu. Utwórz je poprzez te same Document, lub przenieś je za pomocą import_node()/adopt_node().
Najczęściej zadawane pytania
Jakie typy węzłów może tworzyć Document?
Elementy, węzły tekstowe, komentarze i fragmenty dokumentu — za pomocą create_element(), create_text_node(), create_comment() i create_document_fragment().
Jak przenieść lub usunąć istniejące węzły?
Użyj operacji Node: insert_before(), remove_child(), replace_child() i clone_node().
Czy mogę analizować istniejący markup zamiast budować drzewa ręcznie?
Tak — HTMLDocument.parse() dla stron i HTMLDocument.parse_fragment() dla fragmentów produkują ten sam rodzaj drzewa.