Beautiful Soup - 在解析树提取部分前插入

2 投票
2 回答
2290 浏览
提问于 2025-04-17 21:04

我正在尝试使用Beautiful Soup 4从一个大网页中提取信息。我想要的信息包含在一个特定的div里,我可以顺利地提取出来:

passage = soup.find("div", class_="desired_div")

接下来,我想在提取的部分前面加上一些标签,比如我想用另一个div把提取出来的div包裹起来,这样方便我把提取的信息输出成另一个html文件。

使用BS4,我该如何在提取的部分前面插入标签,或者把提取的部分包裹起来呢?根据文档,BS4似乎只允许我操作提取的div的子元素,但我想在提取的div前面插入或者包裹这个div。

2 个回答

2

BeautifulSoup 是用来从 HTML 文件中提取内容的工具。它并不是用来创建 HTML 元素的。不过,还有另一个库叫做 Karrigell,可以帮助你实现你想做的事情。

在 StackOverflow 上有相关的回答:

编辑:BeautifulSoup 4.2.1 版本支持创建新的标签并将它们添加到 HTML 中。使用 BeautifulSoup.new_tag() 可以创建一个新的 HTML 标签,而 insert_before()insert_after() 则可以让你在某些元素之前或之后添加这些标签。

0

如果有人在找解决办法,这里是我最后采取的步骤。

首先,找到你感兴趣的那个div:

tag = soup.find("div", class_="desired_div")

接下来,在你感兴趣的div外面再包裹一个“占位符”div。

newtag = soup.new_tag("div")
newtag['class'] = "placeholder"
tag.wrap(newtag)

然后提取这个占位符div:

passage = soup.find("div", class_="placeholder").extract()

现在,感兴趣的div就成了提取出来的部分的子元素,这样就可以在它前面添加标签或者把标签包裹起来了。

我当然欢迎更好的解决方案,但这个方法似乎是有效的。

撰写回答