Introduktion
Aspose.HTML FOSS för Python är ett nytt open-source-bibliotek för att arbeta med HTML-dokument i Python. Det parsar markup till en standardbaserad dokumentobjektmodell, låter dig bygga och modifiera elementträd programmässigt, och löser upp CSS — inklusive specificitet, inline-deklarationer och arv — till beräknade stilar som du kan läsa tillbaka från vilket element som helst.
Biblioteket riktar sig mot backend- och verktygsscenarier där en webbläsare är otillgänglig eller oönskad: tjänster som rensar lagrade HTML, pipelines som omstrukturerar sidfragment och testsviter som påstår om genererad markup. Det installeras från PyPI som aspose-html-foss, är licensierat under MIT och är implementerat i ren Python för Python 3.10 och senare, så det beter sig likadant på utvecklarmaskiner, CI-körningar och servrar.
Utöver DOM- och CSS-kärnan levererar paketet praktiska byggstenar som HTML-behandling vanligtvis ändå behöver: en HTML-tokeniserare och trädbyggare som du kan driva direkt, WHATWG-stil URL- och URLSearchParams-klasser samt en byte-ström kodningsdetektor.
Vad som ingår
Bygg och modifiera DOM-en
DOM-lagret är byggt kring Document, Element och Node. Skapa element med Document.create_element(), koppla dem samman med append_child(), sätt markup-attribut med Element.set_attribute(), och slå upp noder igen med Document.get_element_by_id(). Fullständiga sidor och fragment parsas via HTMLDocument.parse() och HTMLDocument.parse_fragment().
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
Applicera stilmallar och läs beräknade stilar
CSSStyleSheet.replace_sync() parser stilmallstext, Document.attach_style_sheet() sätter den i spel, och Element.get_computed_style() löser kaskaden. Resultatet respekterar selektorspecificitet — här slår ID-regeln klassregeln:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)
style = el.get_computed_style()
print(style.get_property_value("color"))
Inbäddade deklarationer och kaskaden
Varje element exponerar en levande CSSStyleDeclaration via sin style-egenskap. Inbäddade deklarationer som sätts med set_property() har högre specificitet än författarens stilmallsregler, och get_computed_style() återspeglar det:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Tokeniserare och trädbyggare
När du behöver mer kontroll än ett färdigt träd är de lägre lagren offentliga API. Tokenizer.tokenize() och Tokenizer.tokenize_fragment() emitterar tokenströmmen för ett stycke markup, TreeBuilder.run() utför standardsbaserad trädkonstruktion, och funktionen parse_html() går från markup till träd i ett anrop. Detta är samma komponenter som den hög nivåns parsning använder.
URL:er och teckenkodningar
URL.parse() och URL.can_parse() hanterar URL-parsning och validering i WHATWG-stil, med URLSearchParams (append(), get(), has(), delete()) för frågesträngar. För råa byte, detect_encoding() sniffar kodningen — byte-order-markeringar inkluderade — och returnerar den avkodade texten tillsammans med en förtroendenivå, medan get_canonical_name() normaliserar kodningsetiketter:
from aspose_html.encoding.detection import detect_encoding
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)
Snabbstart
Installera från PyPI:
asposefoss/html is not yet published — build from source until it ships. See the project README for build instructions.Bygg sedan ett dokument, formatera det och läs det beräknade resultatet:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("#bar { color: blue }")
doc.attach_style_sheet(sheet)
style = el.get_computed_style()
print(style.get_property_value("color"))
Öppen källkod & licensiering
Aspose.HTML FOSS för Python släpps under MIT-licensen, så kommersiell användning, modifiering och vidaredistribution är alla tillåtna. Källkoden finns på GitHub och paketet publiceras på PyPI som aspose-html-foss.