Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python抓取信息具有相同的类_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

Python抓取信息具有相同的类

Python抓取信息具有相同的类,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,如何从中返回数据。我正在尝试提取打开和关闭的数据。问题是这两个数字在代码中共享同一个类 它们都共享这个类“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') googclo

如何从中返回数据。我正在尝试提取打开和关闭的数据。问题是这两个数字在代码中共享同一个类

它们都共享这个类“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()
此功能:

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

将仅返回类为
Trsdu(0.3s)
的第一个元素的文本

使用:

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

将使用类
Trsdu(0.3s)
返回包含页面元素的数组

然后您可以迭代它们:

googsoupsoup中元素的
查找所有元素(class='Trsdu(0.3s)':
打印元素。获取文本()

此函数:

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

将仅返回类为
Trsdu(0.3s)
的第一个元素的文本

使用:

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

将使用类
Trsdu(0.3s)
返回包含页面元素的数组

然后您可以迭代它们:

googsoupsoup中元素的
查找所有元素(class='Trsdu(0.3s)':

print element.get_text()

如果只需要
Open
Previous Close
的值,可以使用
findAll
并获取结果中的前两项

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
或者您可以更高一级,并使用
数据测试
属性基于父级
td
查找值

googclose = googsoup.find('td', attrs={'data-test': 'PREV_CLOSE-value'}).get_text()
googopen = googsoup.find('td', attrs={'data-test': 'OPEN-value'}).get_text()
print(googclose, googopen)

>>> 172.17 171.69

如果只需要
Open
Previous Close
的值,可以使用
findAll
并获取结果中的前两项

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
或者您可以更高一级,并使用
数据测试
属性基于父级
td
查找值

googclose = googsoup.find('td', attrs={'data-test': 'PREV_CLOSE-value'}).get_text()
googopen = googsoup.find('td', attrs={'data-test': 'OPEN-value'}).get_text()
print(googclose, googopen)

>>> 172.17 171.69

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

请注意,不仅有class属性,还有
datareactid
属性可能会起作用。事实上,如果你也检查接近数字,你会发现,就像我一样,它的属性是不同的

这建议使用以下代码

>>> 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'

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

请注意,不仅有class属性,还有
datareactid
属性可能会起作用。事实上,如果你也检查接近数字,你会发现,就像我一样,它的属性是不同的

这建议使用以下代码

>>> 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'

如果这是您想要的,请查看以下内容:

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.select("span[data-reactid=42]")[1].text
googopen = googsoup.select("span[data-reactid=48]")[0].text
print("Close: {}\nOpen: {}".format(googclose,googopen))
结果:

Close: 172.17
Open: 171.69

如果这是您想要的,请查看以下内容:

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.select("span[data-reactid=42]")[1].text
googopen = googsoup.select("span[data-reactid=48]")[0].text
print("Close: {}\nOpen: {}".format(googclose,googopen))
结果:

Close: 172.17
Open: 171.69

该页面中有两个
close
。1.前收盘价2。最后。如果您在上一次收盘后,则我上面的代码是正确的,否则如果您想在收盘时获得
,则只需将索引更改为0即可。就这样。那页有两个
close
。1.前收盘价2。最后。如果您在上一次收盘后
,则我上面的代码是正确的,否则如果您想在收盘时获得
,则只需将索引更改为0即可。就这样。