我有一个需要处理的HTML文档。我正在使用“beautifulsoup”进行处理。现在,我想从该文档中检索几个“子soup”,并将它们合并成一个soup,以便稍后将其用作期望soup对象的函数的参数。
如果不清楚,我可以举个例子...
目标是在
如果不清楚,我可以举个例子...
from bs4 import BeautifulSoup
my_document = """
<html>
<body>
<h1>Some Heading</h1>
<div id="first">
<p>A paragraph.</p>
<a href="another_doc.html">A link</a>
<p>A paragraph.</p>
</div>
<div id="second">
<p>A paragraph.</p>
<p>A paragraph.</p>
</div>
<div id="third">
<p>A paragraph.</p>
<a href="another_doc.html">A link</a>
<a href="yet_another_doc.html">A link</a>
</div>
<p id="loner">A paragraph.</p>
</body>
</html>
"""
soup = BeautifulSoup(my_document)
# find the needed parts
first = soup.find("div", {"id": "first"})
third = soup.find("div", {"id": "third"})
loner = soup.find("p", {"id": "loner"})
subsoups = [first, third, loner]
# create a new (sub)soup
resulting_soup = do_some_magic(subsoups)
# use it in a function that expects a soup object and calls its methods
function_expecting_a_soup(resulting_soup)
目标是在
resulting_soup
中拥有一个对象,它的行为类似于以下内容的 soup:<div id="first">
<p>A paragraph.</p>
<a href="another_doc.html">A link</a>
<p>A paragraph.</p>
</div>
<div id="third">
<p>A paragraph.</p>
<a href="another_doc.html">A link</a>
<a href="yet_another_doc.html">A link</a>
</div>
<p id="loner">A paragraph.</p>
有没有一种方便的方法可以做到这一点?如果有比find()
更好的检索“subsoups”的方法,我可以使用它。谢谢。
更新
Wondercricket提出了一个solution,它将包含找到的标签的字符串连接起来,然后再解析成一个新的BeautifulSoup对象。虽然这是解决问题的一种可能的方法,但重新解析可能需要比我想要的时间更长,特别是当我想要检索大部分内容并且有许多这样的文档需要处理时。 find()
返回一个bs4.element.Tag
。难道没有一种方法可以将几个Tag
连接成一个soup而不将Tag
转换为字符串并解析该字符串吗?
id
之外,还可以指定标签吗?例如,如果我想过滤所有带有class="someclass"
的段落,但不包括具有相同类的div
元素,这也是可能的吗? - geckon