使用lxml替换保留其内容的HTML标记

时间:2014-10-15 11:56:00

标签: python lxml

我有一些html内容(没有html,body和head等标签)。我需要做的是从标签中删除样式信息,并用p标签替换div标签。

我正在使用以下方式标记样式信息:

from lxml.html.clean import Cleaner
return Cleaner(style=True).clean_html(html)

如何在保留div标签内容的同时用p标签替换div标签(div标签的内容应该在新的p标签中)。

3 个答案:

答案 0 :(得分:1)

html = html.replace("<div>", "<p>")
html = html.replace("</div>", "</p>")

你可以用完整的HTML解析和生成来做到这一点,但是上面的内容可能会做得很好。

答案 1 :(得分:0)

我是使用BeautifulSoup完成的。它是一个可以使用多个html解析器的python库,但我使用了LXML。这是代码:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
for tag in soup():
    del tag['style']
    del tag['class']
    if tag.name == 'div':
        tag.name = 'p'
return soup.body.encode_contents()

答案 2 :(得分:0)

el = node.cssselect('span')
for e in el:
     e.tag = 'p'

eTree具有内置的简单方法来完成标签的切换。您可以只设置tag参数。下面是一个元素列表经过一次迭代后的样子的示例,目的只是表明它确实将其切换为p标签。

文档链接:https://lxml.de/tutorial.html#elementpath(显示eTree.tag函数,但我没有看到它表明您也可以设置该值)

<class 'list'>: [<Element p at 0x22eb9bc0f40>, <Element span at 0x22eb9bc0ea0>, <Element span at 0x22eba4114f0>, <Element span at 0x22eba411630>, <Element span at 0x22eba411680>, <Element span at 0x22eba4116d0>, <Element span at 0x22eba411720>, <Element span at 0x22eba411770>, <Element span at 0x22eba4117c0>, <Element span at 0x22eba411810>, <Element span at 0x22eba411860>, <Element span at 0x22eba4118b0>, <Element span at 0x22eba411900>, <Element span at 0x22eba411950>, <Element span at 0x22eba4119a0>, <Element span at 0x22eba4119f0>, <Element span at 0x22eba411a40>, <Element span at 0x22eba411a90>, <Element span at 0x22eba411ae0>, <Element span at 0x22eba411b30>, <Element span at 0x22eba411b80>, <Element span at 0x22eba411bd0>, <Element span at 0x22eba411c20>]
<Element p at 0x22eb9bc0f40>
<Element span at 0x22eb9bc0ea0>