用BeautifulSoup替换HTML标签
我现在正在用BeautifulSoup重新格式化一些HTML页面,遇到了一点问题。
我的问题是,原始的HTML里有这样的内容:
<li><p>stff</p></li>
还有
<li><div><p>Stuff</p></div></li>
以及
<li><div><p><strong>stff</strong></p></div><li>
我希望用BeautifulSoup去掉这些div和p标签(如果它们存在的话),但保留strong标签。
我在查阅BeautifulSoup的文档时没有找到相关的信息。
有什么想法吗?
谢谢。
5 个回答
7
我看到很多人对这个简单问题给出了答案,我也来这里想找点有用的信息,但很遗憾没找到我想要的。经过几次尝试,我找到了一种简单的解决办法,下面就是这个办法。
soup = BeautifulSoup(htmlData, "html.parser")
h2_headers = soup.find_all("h2")
for header in h2_headers:
header.name = "h1" # replaces h2 tag with h1
所有的h2标签都变成了h1标签。你只需要改一下名字,就可以把任何标签转换过来。
11
这个问题可能是指早期版本的BeautifulSoup,因为在bs4版本中,你可以直接使用unwrap这个功能:
s = BeautifulSoup('<li><div><p><strong>stff</strong></p></div><li>')
s.div.unwrap()
>> <div></div>
s.p.unwrap()
>> <p></p>
s
>> <html><body><li><strong>stff</strong></li><li></li></body></html>
9
你想做的事情可以通过 replaceWith
来实现。你需要先复制你想用来替换的那个元素,然后把这个复制的元素作为参数传给 replaceWith
。关于 replaceWith
的使用方法,文档里解释得很清楚。