假设我们有这样的HTML(抱歉,我不知道如何复制和粘贴页面信息,这是在内部网上):
我希望获得所有问题的突出显示部分(这就像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.select
和soup.get
有什么区别?
答案 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}}