使用lxml.html替换元素
我对lxml和HTML解析器还比较陌生。
我在想有没有办法把树中的一个元素替换成另一个元素...
比如我有:
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)
我想做类似的事情,但这样会出现“类型错误”,因为“hilited”并不是lxml.etree._Element。
这样做可行吗?
问候,
2 个回答
1
如果你刚接触Python的HTML解析工具,可以试试BeautifulSoup。它是一个用来解析HTML和XML的工具,能够让你很方便地修改解析树。
6
关于lxml,
在 doc.replace(block, hilited)
这个代码里,
block 是lxml的一个元素对象,而hilited 是一个字符串,你不能直接用它来替换。
有两种方法可以做到这一点:
block.text=hilited
或者
body=body.replace(block.text,hilited)