【问题标题】:BeautifulSoup4 - python: how to merge two bs4.element.ResultSet and get one single list?BeautifulSoup4 - python:如何合并两个 bs4.element.ResultSet 并获得一个列表?
【发布时间】:2014-11-03 15:56:37
【问题描述】:

我有两个

bs4.element.ResultSet

对象。

让我们称呼他们

rs1
rs2

我想要一个结果集(我们称之为rs),所有结果都在结果集中。

我还需要弄清楚:

  • 鉴于每个元素都包含一个由 7 个不同类型的属性组成的对象,因此数组、列表或字典是否更适合浏览(可能)大的结果列表
  • 如何将合并的结果集转换为数组/列表/字典

【问题讨论】:

  • 你想解决什么问题?

标签: python python-3.x beautifulsoup


【解决方案1】:

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 元素。

【讨论】:

  • 感谢您的回答。实际上我需要得到一个包含所有标签的列表,整个类是 X,类是 Y。我该怎么做?
  • @dragonmnl: soup.find_all(class_=['x', 'y']) 查找具有任一类的元素。
猜你喜欢
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多