美丽的汤 - 在解析树的提取部分之前插入

时间:2014-03-06 06:39:15

标签: python beautifulsoup

我试图使用Beautiful Soup从大型网页中提取信息4.我想要的信息包含在一个特定的div中,我可以毫无问题地提取:

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

然后我想在树的提取部分之前添加标签 - 例如我想用另一个div包装提取的div - 准备将提取的信息作为另一个html文件输出。

使用BS4,如何在解析树的提取部分之前插入标记,或者包装解析树的提取部分? BS4似乎只允许我对提取的div的子项进行操作(根据文档),但我想在之前插入或包装提取的div。

2 个答案:

答案 0 :(得分:1)

BeautifulSoup旨在从HTML文件中提取内容。它不打算构建HTML元素。然而,可以使用另一个库Karrigell来实现您想要做的事情。

StackOverflow的相关答案:

编辑:BeautifulSoup 4.2.1支持创建新标记并将其添加到HTML中。 BeautifulSoup.new_tag()创建了一个新的HTML代码,insert_before()insert_after()允许您在某些元素之前或之后添加它们。

答案 1 :(得分: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现在是解析树的提取部分的子节点,因此可以在标签周围添加标签或包装标签。

我当然愿意接受更好的解决方案,但这确实有效。