我试图使用Beautiful Soup从大型网页中提取信息4.我想要的信息包含在一个特定的div中,我可以毫无问题地提取:
passage = soup.find("div", class_="desired_div")
然后我想在树的提取部分之前添加标签 - 例如我想用另一个div包装提取的div - 准备将提取的信息作为另一个html文件输出。
使用BS4,如何在解析树的提取部分之前插入标记,或者包装解析树的提取部分? BS4似乎只允许我对提取的div的子项进行操作(根据文档),但我想在之前插入或包装提取的div。
答案 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现在是解析树的提取部分的子节点,因此可以在标签周围添加标签或包装标签。
我当然愿意接受更好的解决方案,但这确实有效。