我正试图从雅虎财经(Yahoo Finance)那里刮掉股价,我的目标是价格。但是当我运行代码时,我的输出中"None"



这是我的代码。

import requests
from bs4 import BeautifulSoup
url = 'https://ca.finance.yahoo.com/quote/AAPL?p=AAPL'
r= requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
price = soup.find('span', {'class': 'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'})
print(price)

输出只返回"None">

您需要在header中设置用户代理,下面是我的工作代码:

import requests
from bs4 import BeautifulSoup
url = 'https://ca.finance.yahoo.com/quote/AAPL?p=AAPL'
headers = {
'User-agent': 'Mozilla/5.0',
}
r= requests.get(url, headers=headers)
print(r.status_code)
soup = BeautifulSoup(r.text, 'html.parser')
price = soup.find("span", {"class":['Trsdu(0.3s)', 'Fw(b)', 'Fz(36px)', 'Mb(-4px)', 'D(ib)'] })
print(price.contents)
#output
# 200
# ['20,475.42']

正如其他评论者所提到的,您可以使用一些包装器库或雅虎金融api。

您的请求被服务器返回404(可能是因为它看起来不太合法)。因此,html解析器无法找到您正在寻找的内容,因此输出None。您可以通过向请求添加一个用户代理来解决这个问题,如下所示。

import requests
from bs4 import BeautifulSoup
url = 'https://ca.finance.yahoo.com/quote/AAPL?p=AAPL'
headers = {"User-Agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion"}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
price = soup.find('span', {'class': 'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'})
print(price)

但是正如评论者所提到的,你真的应该看看他们的api,因为雅虎为你提供了一个工具。

您可以通过yfinance库获取股票数据:https://pypi.org/project/yfinance/

它真的很有用!它可以让你获得不同股票的信息。你会发现这比创建一个自定义刮刀要好。

相关内容

最新更新