关于python:Yahoo-Finance模块不再工作了?

Yahoo-Finance module doesn't work anymore?

本问题已经有最佳答案,请猛点这里访问。

我在python中使用了雅虎财务模块。我把这个项目搁置了几个月,然后又重新开始了。不幸的是,雅虎财务模块的背后似乎已经没有任何东西了!

我运行了pypi文档中的示例代码,什么也没有得到。

1
2
3
4
5
6
7
8
>>> from yahoo_finance import Share
>>> yahoo = Share('YHOO')
>>> print yahoo.get_open()
None
>>> print yahoo.get_price()
None
>>> print yahoo.get_trade_datetime()
None

虽然我可以打开goog,但当我试图访问历史数据时,我得到了一个错误,并且似乎无法访问任何股票的历史数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
None
>>> goog = Share('GOOG')
>>> goog.get_open()
'956.83'
>>> print(yahoo.get_open())
None
>>> goog.get_historical('2014-04-25', '2014-04-29')
Traceback (most recent call last):
  File"C:\Users\me\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\yahoo_finance\__init__.py"
, line 120, in _request
    _, results = response['query']['results'].popitem()
AttributeError: 'NoneType' object has no attribute 'popitem'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File"C:\Users\me\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\yahoo_finance\__init__.py"
, line 123, in _request
    raise YQLQueryError(response['error']['description'])
KeyError: 'error'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
  File"C:\Users\me\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\yahoo_finance\__init__.py"
, line 342, in get_historical
    result = self._request(query)
  File"C:\Users\me\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\yahoo_finance\__init__.py"
, line 125, in _request
    raise YQLResponseMalformedError()
yahoo_finance.YQLResponseMalformedError: Response malformed.
>>>

我试过在最近的日期范围内跑步,但没有运气。历史数据似乎只是从模块中不可用,而在几个星期前,它是可靠的。有什么见解吗?


来自ED0906的答案:https://stackoverflow.com/a/44050039/5766416

雅虎停止了他们的桌面连接API。您仍然可以通过手机连接到它。因此,可以通过将GET请求的头文件设置为某个移动浏览器来绕过这一点。

按照Ed的方法,获取并设置请求中的crumb。我使用了它,并验证了它的有效性。