来自python 2.7中的googlefinance的HTTP错误404

时间:2017-09-06 16:54:42

标签: python json google-finance

在python 2.7 shell中我运行了以下内容:

$from googlefinance import getQuotes
$import json
$from urllib2 import urlopen
$print json.dumps(getQuotes('AAPL'), indent=2)

第4个命令收到错误消息,如下所示:

Traceback (most recent call last):
  Python Shell, prompt 3, line 1
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\site-packages\googlefinance\__init__.py", line 70, in getQuotes
    content = json.loads(request(symbols))
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\site-packages\googlefinance\__init__.py", line 33, in request
    resp = urlopen(req)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 435, in open
    response = meth(req, response)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 473, in error
    return self._call_chain(*args)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found

不知道最近发生了什么。 这是我活动的图像。 enter image description here

3 个答案:

答案 0 :(得分:11)

Google财经似乎修改了他们的网址/端点,googlefinance包尚未更新以反映更改。

由于大多数这些更改对最终用户来说相当不透明(并且您使用的库已经在2年内更新),您可能会更好地处理原始Google财经响应

Google财务终端

您可以通过以下网址检索有关特定股票代码的信息:

https://finance.google.com/finance?output=json&q=TICKER_SYMBOL

响应

Google财经以此格式返回JSON结果

\n// [\n{\n"symbol" : "AAPL",\n"exchange" : "NASDAQ",\n"id": "22144",\n"t" 
: "AAPL",\n"e" : "NASDAQ",\n"name" : "Apple Inc."\n, "f_reuters_url" : 
"http:\\x2F\\x2Fstocks.us.reuters.com\\x2Fstocks\\x2Fratios.asp?rpc=66\\x26symbol=AAPL.O",\n"f_recent_quarter_date" : "Q3 (Jul \\x2717)",\n"f_annual_date" : "2016",\n"f_ttm_date" : "2015",\n"financials" :

    ... a lot more stuff ...
[\n]\n}]\n'

它不能由Python的JSON解析器按原样加载,因为它具有前导//,并将所有内容包装在[]中。它还有各种字符串中需要解码的Unicode转义字符。

完整的代码和解析

我将使用requests模块,但如果您想要一个内置urllib模块的示例,我也可以显示它。

import json

import requests

rsp = requests.get('https://finance.google.com/finance?q=AAPL&output=json')

if rsp.status_code in (200,):

    # This magic here is to cut out various leading characters from the JSON 
    # response, as well as trailing stuff (a terminating ']\n' sequence), and then
    # we decode the escape sequences in the response
    # This then allows you to load the resulting string
    # with the JSON module.
    fin_data = json.loads(rsp.content[6:-2].decode('unicode_escape'))

    # print out some quote data
    print('Opening Price: {}'.format(fin_data['op']))
    print('Price/Earnings Ratio: {}'.format(fin_data['pe']))
    print('52-week high: {}'.format(fin_data['hi52']))
    print('52-week low: {}'.format(fin_data['lo52']))

这将输出:

Opening Price: 162.71
Price/Earnings Ratio: 18.43
52-week high: 164.94
52-week low: 102.53

完整的自动收录器JSON中包含的数据远远多于我输出的数据,因此您需要决定如何使用其中的任何数据。< / p>

替代

或者,您可以使用yahoo-finance模块,因为雅虎仍然提供真正的财务API,因此可能不太可能出现此类问题。

答案 1 :(得分:1)

如果您使用的是Python 3.6或2.7,请尝试使用: Quandl https://www.quandl.com/ 使用WIKI似乎很稳定 例: Apple = quandl.get('WIKI / AAPL',start_date =“2016-12-31”,end_date =“”) 时间序列文档: https://docs.quandl.com/docs/time-series-2 如果你发出超过50个请求,Quandl需要一个密钥(免费使用)

答案 2 :(得分:0)

使用Google股票ID

在此终端上运行的多个股票详细信息
https://finance.google.com/finance/data?dp=mra&output=json&catid=all&cid=13564339,5904015