Python抓取信息具有相同的类

2024-10-01 07:14:47 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从https://finance.yahoo.com/quote/FB?p=FB返回数据。我正在尝试提取打开和关闭的数据。问题是这两个数字在代码中共享同一个类。在

他们都共享这个类'Trsdu(0.3s)'

如果类是相同的,如何区分这些类?在

import requests
from bs4 import BeautifulSoup

goog = requests.get('https://finance.yahoo.com/quote/FB?p=FB')

googsoup = BeautifulSoup(goog.text, 'html.parser')

googclose = googsoup.find(class_='Trsdu(0.3s) ').get_text()

Tags: 数据texthttpsimportcomgetfbrequests
3条回答

如果您使用Chrome浏览器,您可以右键单击您想了解更多信息的项目,然后从结果菜单中选择检查。浏览器将显示与OPEN关联的号码的类似内容。在

OPEN code

请注意,不仅有一个class属性,还有data-reactid属性可以做到这一点。事实上,如果你也检查这个接近的数字,你会发现它的属性是不同的。在

下面的代码建议如下。在

>>> import requests
>>> import bs4
>>> soup = bs4.BeautifulSoup(page, 'lxml')
>>> soup.findAll('span', attrs={'data-reactid': '42'})[0].text
'172.17'
>>> soup.findAll('span', attrs={'data-reactid': '48'})[0].text
'171.69'

如果只需要OpenPrevious Close的值,则可以使用findAll并获取结果中的前2项

googclose, googopen = googsoup.findAll('span', class_='Trsdu(0.3s) ')[:2]
googclose = googclose.get_text()
googopen = googopen.get_text()
print(googclose, googopen)

>>> 172.17 171.69

或者您可以更高一级,使用data-test属性查找基于父td的值

^{pr2}$

此功能:

googclose = googsoup.find(class_='Trsdu(0.3s) ').get_text()

将只返回第一个具有Trsdu(0.3s)类的元素的文本。在

使用:

googclose = googsoupsoup.find_all(class_='Trsdu(0.3s)')

将返回一个数组,该数组包含具有Trsdu(0.3s)类的页面元素。在

然后可以迭代它们:

for element in googsoupsoup.find_all(class_='Trsdu(0.3s)'): print element.get_text()

相关问题 更多 >