BeautifulSoup4 - python: 如何合并两个bs4.element.ResultSet 并获得一个列表?

1 投票
1 回答
5521 浏览
提问于 2025-05-01 08:20

我有两个

bs4.element.ResultSet

对象。

我们称它们为

rs1
rs2

我想要一个结果集(我们称它为rs),里面包含所有的结果。

我还需要弄清楚:

  • 在处理一个(可能很大的)结果列表时,使用数组、列表还是字典更好,因为每个元素都是一个包含7个不同类型属性的对象
  • 如何将合并后的结果集转换成数组/列表/字典
暂无标签

1 个回答

11

bs4.element.ResultSet对象其实就是一个直接继承自list的类。你可以用ResultSet.extend()方法来扩展一个结果集,或者是另一个结果集:

rs1.extend(rs2)

或者你也可以简单地把两个结果集合并在一起:

newlist = rs1 + rs2 

后者会创建一个list对象,里面包含了两个结果集的内容,这样你就会失去.source这个属性。其实这也没什么大不了的,因为在BeautifulSoup里并没有哪个地方会用到这个属性。

其实有一些方法可以让你一开始就只创建一个结果集,而不是把两个结果集合并在一起。比如说,如果你搜索的内容可以找到任意一种结果类型,返回的结果会按照文档的源代码顺序排列,而不是一个接一个。你可以在find_all()方法中使用列表参数,例如:

soup.find_all(['a', 'link'], href=True)

这样就可以找到所有带有href属性的alink元素。

撰写回答