BeautifulSoup:提取各种项目的属性

时间:2017-03-02 23:23:48

标签: python css beautifulsoup

假设我们有这样的HTML(抱歉,我不知道如何复制和粘贴页面信息,这是在内部网上):

enter image description here

我希望获得所有问题的突出显示部分(这就像Stack Overflow页面)。 编辑:为了更清楚,我感兴趣的是获得一个列表:

['question-summary-39968',
 'question-summary-40219',
 'question-summary-42899',
 'question-summary-34348',
 'question-summary-32497',
 'question-summary-35308',
...]

现在我知道一个可行的解决方案是列表理解我可以做的事情:

[item["id"] for item in html_df.find_all(class_="question-summary")]

但这不是我想要的。如何直接访问question-summary-41823第一项?

另外,soup.selectsoup.get有什么区别?

1 个答案:

答案 0 :(得分:1)

我想我会在这里发布我的答案,如果它有助于其他人。

我要做的是访问question-summary课程中的html_df.find(class_="question-summary")["id"] 属性。

现在你可以做这样的事情,只为第一项(对象?)获取它:

html_df.select('.question-summary')

但是你想要所有这些。所以你可以这样做来获取类数据:

html_df.select('.question-summary')["id"]

但你不能只做

bs4.elements

因为您的列表中填充了for。因此,您需要遍历列表并选择您想要的部分。您可以执行[item["id"] for item in html_df.find_all(class_="question-summary")] 循环,但更优雅的方法是使用列表理解:

question-summary

分解这一点,它:

  • 首先创建一个包含汤中所有item个对象的列表
  • 迭代列表中的每个元素,我们将其命名为id
  • 提取select属性并将其添加到列表

或者,您可以使用[item["id"] for item in html_df.find_all(class_="question-summary")]

['question-summary-43960',
 'question-summary-43953',
 'question-summary-43959',
 'question-summary-43947',
 'question-summary-43952',
 'question-summary-43945',
...]

我更喜欢第一个版本,因为它更明确,但任何一个都会导致:

{{1}}