来自python 2.7中googlefinance的HTTP错误404 [英] HTTP Error 404 from googlefinance in python 2.7
问题描述
在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屋!