Reemplazar elementos con lxml.html
Pregunta
Soy bastante nuevo en lxml y HTML Parsers en su conjunto. Me preguntaba si hay una manera de reemplazar un elemento dentro de un árbol con otro elemento ...
Por ejemplo, tengo:
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)
Quiero hacer algo en ese sentido, pero esto da como resultado " TypeError " porque " hilited " no es un lxml.etree._Element.
¿Es esto factible?
Saludos,
Solución
Con respecto a lxml,
En doc.replace (block, hilited)
block es el objeto Element de lxml, hilited es string, no puede reemplazarlo.
Hay 2 formas de hacerlo
block.text=hilited
o
body=body.replace(block.text,hilited)
Otros consejos
Si eres nuevo en los analizadores HTML de Python, puedes probar BeautifulSoup , un analizador html / xml, que le permite modificar el análisis árbol fácilmente .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow