必威体育Betway必威体育官网
当前位置:首页 > IT技术

Python 爬取 Yahoo! Finance 数据问题总结

时间:2019-10-18 20:42:09来源:IT技术作者:seo实验室小编阅读:60次「手机版」
 

yahoo finance

在《Python for Data Analysis》的第五章 Pandas 入门中,有一段分析 Yahoo! Fiannce 的股票价格和成交量的代码,此代码年代已久,如果照写,根本不能正确运行,本篇文章总结了我遇到的几个问题,以及解决办法。

import pandas.io.data as web

all_data = {}
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']:
    all_data[ticker] = web.get_data_yahoo(ticker, start, end)

price = DataFrame({tic: data['Adj Close']
                        for tic, data in all_data.iteritems()})
volumn = DataFrame({tic: data['Volume']
                        for tic, data in all_data.iteritems()})

接下来,解决以下问题:

  1. data 模块不能正常导入
  2. is_list_like 不能正常导入
  3. get_data_yahoo API 的问题
  4. Google 的 ticker 改名

对着书敲完代码,得到第一个错误:

在这里插入图片描述

意思就是 data 找不到啊,谷歌一下,原来是因为 data 模块从 pandas.io 迁移到了 pandas_datareader 下面了,所以不能 import 进来。

解决方法:把 pandas.io.data 替换为 pandas_datareader.data 即可。

执行步骤:

1、先安装 pandas_datareader

pip install pandas-datareader

2、把 pandas_datareader.data 模块 import 进来(我把别名从 web 换成了 pdr)

import pandas_datareader.data as pdr

(参考链接:https://www.jianshu.com/p/a02c4a058506 )

接着,发现第二个问题:

ImportERROR: cannot import name is_list_like

根据错误提示:

在这里插入图片描述

进去相应的 fred.py 文件查看,发现了:

from pandas.core.common import is_list_like

谷歌之,发现是 is_list_like 也搬家了,从 pandas.core.common 搬到 pandas.api.types 中去了。这里,基本有两种解决办法。第一种,是直接去修改 fred.py,第二种是在自己的代码里面声明一下导入 is_list_like 途径的改变。我采用了第二种方法:

import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like

(参考链接:https://stackoverflow.com/questions/50394873/import-pandas-datareader-gives-importerror-cannot-import-name-is-list-like )

至此,解决以上两个问题。

接着,爬取 Yahoo! Finance 股票数据的时候,出现第三个问题:

在这里插入图片描述

很明显,get_data_yahoo 这一 API 有问题。谷歌之,得到下面的解决办法。

首先,安装 fix_yahoo_finance:

pip install fix_yahoo_finance --upgrade --no-cache-dir

接着:

import fix_yahoo_finance as yf
yf.pdr_override()

只用把上面这段代码加进去,即可正常使用 get_data_yahoo。(参考链接:https://pypi.org/project/fix-yahoo-finance/ )

最后,在下载数据的时候,有一个小更新需要在代码中更正下,就是 Google 的 ticker 从 GOOG 变成了 GOOGL。(参考链接:https://stackoverflow.com/questions/23642194/loading-data-from-yahoo-finance-with-pandas )

这样一步步下来,文章开头书中的代码已经改善为下面可以正常运行的代码:

import datetime
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import pandas_datareader.data as pdr
import fix_yahoo_finance as yf
yf.pdr_override()
from  pandas import Series, DataFrame

start = datetime.datetime(2018, 1, 1)
end = datetime.date.today()
tickers = ['AAPL', 'IBM', 'MSFT', 'GOOGL']

all_data = {}
for ticker in tickers:
    all_data[ticker] = pdr.get_data_yahoo(ticker, start, end)

price = DataFrame({tic: data['Adj Close']
                        for tic, data in all_data.iteritems()})
volumn = DataFrame({tic: data['Volume']
                        for tic, data in all_data.iteritems()})

书中的结果:

在这里插入图片描述

相关阅读

JAVA获取随机数

JAVA获取随机数 java中一般是通过Random类来获取随机数,构造函数一般有两种形式 - Random(long seed); - Random(); 第一种是

系统流程图、数据流程图、IPO图和甘特图

前言:       在软件工程文档中我们会看到各种图,系统流程图,数据流程图和Ipo图是最主要的图。下面就让我来介绍一下这三类图都

从0到1,聊聊如何搭建数据指标体系

很多人都用数据指标来统计项目效果,但是做出来的数据往往零散,看不出关键信息。那么如何才能将指标体系化,通过单点数据看全局问题呢

SPSS(十一)SPSS信息浓缩技术--主成分分析、因子分析(图文

SPSS(十一)信息浓缩技术--主成分分析、因子分析(图文+数据集) 当我们的自变量存在多重共线性,表现为进行回归时候方程系数估计不正常

MySQL数据库中.frm和.myi和.myd文件是什么文件?作用是?

data目录下发现这三种文件,后辍名分别为-frm,myi,myd,请问分别代表什么文件?这三种文件各有什么作用? 如果一个表同时有3个你上面说的

分享到:

栏目导航

推荐阅读

热门阅读