Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 漂亮的汤-在解析树的提取部分之前插入_Python_Beautifulsoup - Fatal编程技术网

Python 漂亮的汤-在解析树的提取部分之前插入

Python 漂亮的汤-在解析树的提取部分之前插入,python,beautifulsoup,Python,Beautifulsoup,我正在尝试使用BeautifulSoup4从一个大网页中提取信息。我想要的信息包含在一个特定的div中,我可以毫无问题地提取该div: passage = soup.find("div", class_="desired_div") 然后,我想在树的提取部分之前添加标记-例如,我想用另一个div包装提取的div-以准备将提取的信息输出为另一个html文件 对于BS4,如何在解析树的提取部分之前插入标记,或包装解析树的提取部分?BS4似乎只允许我对提取的div的子项进行操作(根据文档),但我希望

我正在尝试使用BeautifulSoup4从一个大网页中提取信息。我想要的信息包含在一个特定的div中,我可以毫无问题地提取该div:

passage = soup.find("div", class_="desired_div")
然后,我想在树的提取部分之前添加标记-例如,我想用另一个div包装提取的div-以准备将提取的信息输出为另一个html文件


对于BS4,如何在解析树的提取部分之前插入标记,或包装解析树的提取部分?BS4似乎只允许我对提取的div的子项进行操作(根据文档),但我希望在提取的div之前插入或包装。BeautifulSoup旨在从HTML文件中提取内容。它不是用来构建HTML元素的。然而,有另一个库可以用来实现您正在尝试做的事情

有关StackOverflow的相关回答:


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

如果有其他人在寻找解决方案,下面是我最后要做的

首先,找到感兴趣的部门:

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现在是解析树的提取部分的子级,因此可以在标记之前添加标记或围绕标记进行包装


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

我当然可以看出,使用BS从零开始编写HTML页面是不可能的。然而,当正在创建的页面只是在我使用BS提取的html代码之前添加/包装一些标记,并且BS具有此功能时,使用Karrigell?是的,刚刚检查过,BS有例程
。new_tag(),insert_before()
insert_after()
来实现这一点肯定有点过分。编辑我的答案以反映这一点。