首页 > 解决方案 > 错误:Errno 套接字错误] [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:727)

问题描述

我有一个小代码,在 python 2.7.17 中,我试图访问 Yahoo! Finance API 来获取有关股票的信息,但是当我执行它时,我得到一个错误。我不知道如何解决它。

这是代码:

 import urllib

urlStock = 'http://finance.yahoo.com/d/quotes.csv?s=aapl&f=nagh' 
response = urllib.urlopen(urlStock).read()
print response

这是错误:

   Exception has occurred: IOError
[Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)
  File "/Users/ivanparra/Dropbox/Aprendizaje Python/InternetTests.py", line 4, in <module>
    response = urllib.urlopen(urlStock).read()

标签: pythonapi

解决方案


不幸的是,该网站自 2018 年以来已停产(此处有更多讨论)。但是,正如链接的 Github 问题线程中所指出的,还有另一种选择。网址是:

https://query1.finance.yahoo.com/v7/finance/quote?lang=en-US&region=US&corsDomain=finance.yahoo.com&symbols=AAPL&fields=regularMarketPrice

requests就个人而言,由于其简单的语法,我倾向于尽可能使用该库(您可以使用 pip 轻松安装)。如果您有 SSL 问题,请参阅我在示例代码中的评论。

这是我如何查询它:

import requests
import pdb

res = requests.get("https://query1.finance.yahoo.com/v7/finance/quote?lang=en-US&region=US&corsDomain=finance.yahoo.com&symbols=AAPL&fields=regularMarketPrice")
# If you need to work around SSL issues, set the verify kw arg to False. For example:
# requests.get("URL_HERE", verify=False)

stock_data = res.json()
price = stock_data['quoteResponse']['result'][0]['regularMarketPrice']
print(price)

推荐阅读