与晨星的熊猫Datareader

时间:2018-05-25 00:30:55

标签: python pandas web-scraping error-handling timer

我使用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'

4 个答案:

答案 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_countValueError使它对我有用。

答案 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