我使用pandas进行网页抓取并使用晨星公司的API。我不时地用一个晨星挣扎着崩溃蟒蛇的网站搜索一个网站。
我在下面列出了相关内容,它几乎总是有效,我不认为我的代码会导致错误,但我无法解决大熊猫对我的影响。 Date是一个变量,DataReader的格式正确,它不会引发问题。
import pandas as pd
import pandas_datareader.data as web
df = web.DataReader(ticker, "morningstar", date)
如果一个自动收报机被卡住,几分钟后将会打印出大熊猫(在它上面,而不是我的打印语句)短语"添加(在这里插入自动收录器)重试列表"。消息弹出后不久,我弹出一个窗口,说“#34; Python意外退出"。
我试图用一个定时器将datareader包装在一个while循环中以停止它并继续下一个自动收报机,但它没有工作。我假设这是因为控制流程。 我也尝试过使用interruptingcow模块,希望它可以提供帮助,但得到与常规计时器相同的结果。
有没有办法解决这个问题?它每次都会崩溃我的脚本。 我遇到过的一些令人痛苦的代号是' BBXTB' CRXPF'' IMMVD'和' FFRMF'
答案 0 :(得分:1)
我仍然不知道股票行情为何会失败并正在调查。但是,我可以通过直接修改pandas_datareader\mstar\daily.py
来使失败不使脚本崩溃。
我的版本是0.6.0
。说明仅适用于此版本。
第134-138行看起来像这样:
if len(failed) > 0 and self.retry_count > 0:
# TODO: This appears to do nothing since
# TODO: successful symbols are not added to
self._dl_mult_symbols(symbols=failed)
self.retry_count -= 1
计数器放在错误的位置,需要与上面的行互换,例如:
if len(failed) > 0 and self.retry_count > 0:
# TODO: This appears to do nothing since
# TODO: successful symbols are not added to
self.retry_count -= 1
self._dl_mult_symbols(symbols=failed)
这应该允许失败的调用正常退出而不会引起堆栈溢出。
偶然地,https://github.com/pydata/pandas-datareader/blob/master/pandas_datareader/mstar/daily.py显示@dtemkin直接修复了pandas_datareader的当前版本,因此可以在下一个版本中发布/解决。
您可以通过找到python存储其库的位置来找到此文件。我通过Visual Studio 2017安装了anaconda,文件的位置在:C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas_datareader\mstar\daily.py
答案 1 :(得分:1)
我认为您的问题与this question相似。
以下代码段应有所帮助:
import pandas_datareader
import datetime
start = datetime.datetime(2018, 5, 1)
end = datetime.datetime(2018, 5, 30)
def get_data(ticker):
try:
df = pandas_datareader.data.DataReader('%s' % (ticker), 'morningstar', start, end, retry_count=0)
print(df.tail(5))
except ValueError:
print('Ticker Symbol %s is not available!' % (ticker))
get_data('TSLA') #valid Symbol
get_data('yyfy') #not a valid Symbol
retry_count
和ValueError
使它对我有用。
答案 2 :(得分:0)
在发布0.7.0之前,建议从Github repository的master分支中下载Pandas Datareader的最新开发版本。如果您使用的是pip,我建议:
$ pip install git+https://github.com/pydata/pandas-datareader
答案 3 :(得分:0)
根据数据读取器文档,由于它们的API发生了很大的变化并且没有稳定的替代品,因此Yahoo!,Google Options,Google Quotes和EDGAR已被立即弃用。改用“ iex”
import pandas_datareader.data as web
import datetime as dt
start = dt.datetime(2018,1,1)
end = dt.datetime(2019,1,1)
aapl = web.DataReader('AAPL', 'iex', start, end)
aapl.shape
(251, 5)
aapl.head()
open high low close volume
date
2018-01-02 167.6431 169.7514 166.7564 169.7120 25555934
2018-01-03 169.9780 171.9682 169.4165 169.6825 29517899
2018-01-04 169.9879 170.9041 169.5347 170.4707 22434597
2018-01-05 170.8746 172.7760 170.4904 172.4115 23660018
2018-01-08 171.7711 173.0125 171.3573 171.7711 20567766