使用lxml.html替换元素

10 投票
2 回答
8976 浏览
提问于 2025-04-15 16:28

我对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)

撰写回答