Austauschen von Elementen mit lxml.html
Frage
ich ziemlich neu bin lxml und HTML-Parser als Ganze. Ich frage mich, ob es einen Weg gibt, ein Element in einem Baum mit einem anderen Element ...
ersetzenZum Beispiel habe ich:
body = """<code> def function(arg): print arg </code> Blah blah blah <code> int main() { return 0; } </code> """
doc = lxml.html.fromstring(body)
codeblocks = doc.cssselect('code')
for block in codeblocks:
lexer = guess_lexer(block.text_content())
hilited = highlight(block.text_content(), lexer, HtmlFormatter())
doc.replace(block, hilited)
Ich möchte etwas in diese Richtung tun, aber dies führt zu einer „Typeerror“, weil „gehilighted“ kein lxml.etree._Element ist.
Ist das machbar?
Grüße,
Lösung
In Bezug auf lxml,
In doc.replace(block, hilited)
Block ist das Element des Objekts lxml, gehilighted ist string, man kann das nicht ersetzen.
Es gibt zwei Möglichkeiten, das
zu tunblock.text=hilited
oder
body=body.replace(block.text,hilited)
Andere Tipps
Wenn Sie Python HTML-Parser neu sind, könnten Sie versuchen, BeautifulSoup , ein hTML / xML-Parser, die Sie ändern den Parsing können Baum leicht .
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow