用BeautifulSoup替换HTML标签

7 投票
5 回答
28571 浏览
提问于 2025-04-16 05:19

我现在正在用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 的使用方法,文档里解释得很清楚

撰写回答