来自python 2.7中googlefinance的HTTP错误404 [英] HTTP Error 404 from googlefinance in python 2.7

查看:104
本文介绍了来自python 2.7中googlefinance的HTTP错误404的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在python 2.7 shell中,我运行了以下操作:

In python 2.7 shell I ran the follwoings:

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

第四个命令出现错误消息,如下所示:

Got error message on the 4th command as follows:

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

不确定发生了什么. 这是我的活动的图片.

Not sure whats going on. Here is an image of my activities.

推荐答案

似乎Google Finance修改了其URL/端点,并且googlefinance软件包尚未更新以反映更改.

It seems like Google Finance modified their URLs/endpoints and the googlefinance package has not been updated to reflect the change.

由于大多数更改对于最终用户而言都是相当不透明的(并且您使用的库在两年内都没有更新),所以您最好自己处理原始的Google Finance响应.

Since most of these changes are rather opaque to end-users (and the library you're using hasn't been updated in 2 years), you might have better luck dealing with the raw Google Finance response yourself.

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

You can retrieve information about a particular ticker symbol via the following URL:

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

响应

Google财经以这种格式返回JSON结果

The Response

Google Finance returns JSON results in this format

\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换码字符.

It can't be loaded by Python's JSON parser as-is because it has leading //, and wraps everything inside []. It also has Unicode-escaped characters in various strings that need to be decoded.

我将为此使用requests模块,但是如果您想使用内置urllib模块的示例,我也可以进行演示.

I'm going to use the requests module for this, but if you want an example with the built-in urllib module, I can show that as well.

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中包含的数据比我输出的要多得多,因此,由您来决定如何使用其中的任何数据.

There is a lot more data that's included in a full ticker JSON than what I'm outputting, so it's up to you to decide how you want to use any of it.

或者,您可以使用 yahoo-finance 模块,该模块不太可能具有像Yahoo这样的问题仍然提供了真正的财务API.

Alternatively, you could use the yahoo-finance module, which is probably less likely to have issues like this as Yahoo still provide a real finance API.

这篇关于来自python 2.7中googlefinance的HTTP错误404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆