我正在抓取熊猫的网页,使用的是morningstar的API。每隔一段时间,我就会用一个自动收报机刮掉一个网站,而morningstar会与之纠缠不休,导致python崩溃。
我已经在下面添加了相关的代码行,它几乎总是有效的,我不认为是我的代码导致了错误,但我无法绕过熊猫冻结在我身上。在这里,Date是一个DataReader格式正确的变量,它不会引发问题。
import pandas as pd
import pandas_datareader.data as web
df = web.DataReader(ticker, "morningstar", date)如果滚动条卡住了,几分钟后,pandas会打印出"adding (insert ticker here) to retry list“这句话(它自己,而不是我的print语句)。消息弹出后不久,我得到一个弹出窗口,上面写着"Python意外退出“。
我曾尝试用计时器将datareader封装在while循环中,以停止它并转移到下一个报价器,但它不起作用。我假设这是因为控制流。我还尝试使用interruptingcow模块,希望它能有所帮助,但得到了与常规计时器相同的结果。
有没有办法绕过这个问题?它每次都会使我的脚本崩溃。我遇到的一些令人头疼的代码是“BBXTB”、“CRXPF”、“IMMVD”和“FFRMF”。
发布于 2018-07-02 10:34:23
我仍然不知道为什么自动收报机会失败,并正在调查。但是,通过直接修改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 Studio2017安装了anaconda,文件位置是:C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas_datareader\mstar\daily.py
发布于 2018-07-18 10:23:07
我认为你的问题与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 Symbolretry_count和ValueError让它为我工作。
发布于 2018-07-16 14:10:24
在0.7.0发布之前,建议从Github repository的主分支下载最新开发版本的Pandas Datareader。如果你使用的是pip,我会推荐:
$ pip install git+https://github.com/pydata/pandas-datareaderhttps://stackoverflow.com/questions/50519924
复制相似问题