Substituindo os elementos com lxml.html
Pergunta
Eu sou bastante novo para lxml e analisadores HTML como um todo. Eu queria saber se existe uma maneira de substituir um elemento dentro de uma árvore com um outro elemento ...
Por exemplo eu tenho:
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)
Eu quero fazer algo nesse sentido, mas isso resulta em uma "TypeError" porque "hilited" não é uma lxml.etree._Element.
É este viável?
Saudações,
Solução
Em relação lxml,
Em doc.replace(block, hilited)
bloco é a de lxml elemento de objeto, hilited é string, você não pode substituir isso.
Há 2 maneiras de fazer isso
block.text=hilited
ou
body=body.replace(block.text,hilited)
Outras dicas
Se você é novo para analisadores de python HTML, você pode experimentar BeautifulSoup , um html / xml parser, que permite modificar o parse árvore facilmente .
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow