我有一些html内容(没有html,body和head等标签)。我需要做的是从标签中删除样式信息,并用p标签替换div标签。
我正在使用以下方式标记样式信息:
from lxml.html.clean import Cleaner
return Cleaner(style=True).clean_html(html)
如何在保留div标签内容的同时用p标签替换div标签(div标签的内容应该在新的p标签中)。
答案 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>