该系列视频已经搬运至bilibili: 点击查看

欢迎来到Python for Finance教程系列的第6部分。 在之前的Python教程中,我们介绍了如何获取我们感兴趣的公司名单(在我们的案例中是标准普尔500指数),现在我们将收集所有这些公司的股票定价数据。

到此为止的代码:

import bs4 as bs
import pickle
import requests def save_sp500_tickers():
resp = requests.get('http://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
soup = bs.BeautifulSoup(resp.text, 'lxml')
table = soup.find('table', {'class': 'wikitable sortable'})
tickers = []
for row in table.findAll('tr')[1:]:
ticker = row.findAll('td')[0].text
tickers.append(ticker) with open("sp500tickers.pickle","wb") as f:
pickle.dump(tickers,f) return tickers

我们将添加一些新的导入:

import datetime as dt
import os
import pandas as pd
import pandas_datareader.data as web

我们将使用datetime指定Pandas datareader的日期,os将检查并创建目录。 你已经知道什么是pandas了!

开始我们的新功能:

def get_data_from_yahoo(reload_sp500=False):

    if reload_sp500:
tickers = save_sp500_tickers()
else:
with open("sp500tickers.pickle","rb") as f:
tickers = pickle.load(f)

在这里,我将展示一个可以处理是否重新加载标准普尔500列表的方法的快速示例。如果我们问这个问题,该计划将重新拉动标准普尔500指数,否则它只会使用我们的pickle。现在我们要准备抓取数据。

现在我们需要决定我们将如何处理数据。我倾向于只解析一次网站,并在本地存储数据。我不会事先知道我可能用数据做的所有事情,但是我知道如果我将不止一次地拉它,我不妨将它保存起来(除非它是一个巨大的数据集,不是)。因此,我们将把所有可以从雅虎返回给我们的每一种股票都拿出来,并保存下来。为此,我们将创建一个新目录,并在那里存储每个公司的库存数据。首先,我们需要这个初始目录:

    if not os.path.exists('stock_dfs'):
os.makedirs('stock_dfs')

您可以将这些数据集存储在与您的脚本相同的目录中,但在我看来这会非常麻烦。现在我们准备好提取数据了。你已经知道如何做到这一点,我们在第一篇教程中做到了!

    start = dt.datetime(2000, 1, 1)
end = dt.datetime(2016, 12, 31) for ticker in tickers:
if not os.path.exists('stock_dfs/{}.csv'.format(ticker)):
df = web.DataReader(ticker, "yahoo", start, end)
df.to_csv('stock_dfs/{}.csv'.format(ticker))
else:
print('Already have {}'.format(ticker))

你可能会想要为这个函数做一些force_data_update参数,因为现在它不会重新提取它已经看到命中的数据。由于我们正在提取每日数据,因此您需要重新提取至少最新的数据。也就是说,如果是这种情况,那么最好使用数据库而不是每个公司的表格,然后从雅虎数据库中提取最新的值。尽管如此,我们仍然保持简单!

完整的代码到目前为止:

import bs4 as bs
import datetime as dt
import os
import pandas as pd
import pandas_datareader.data as web
import pickle
import requests def save_sp500_tickers():
resp = requests.get('http://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
soup = bs.BeautifulSoup(resp.text, 'lxml')
table = soup.find('table', {'class': 'wikitable sortable'})
tickers = []
for row in table.findAll('tr')[1:]:
ticker = row.findAll('td')[0].text
tickers.append(ticker) with open("sp500tickers.pickle","wb") as f:
pickle.dump(tickers,f) return tickers #save_sp500_tickers() def get_data_from_yahoo(reload_sp500=False): if reload_sp500:
tickers = save_sp500_tickers()
else:
with open("sp500tickers.pickle","rb") as f:
tickers = pickle.load(f) if not os.path.exists('stock_dfs'):
os.makedirs('stock_dfs') start = dt.datetime(2000, 1, 1)
end = dt.datetime(2016, 12, 31) for ticker in tickers:
# just in case your connection breaks, we'd like to save our progress!
if not os.path.exists('stock_dfs/{}.csv'.format(ticker)):
df = web.DataReader(ticker, "yahoo", start, end)
df.to_csv('stock_dfs/{}.csv'.format(ticker))
else:
print('Already have {}'.format(ticker)) get_data_from_yahoo()

在运行它的过程中。 如果雅虎不给你持续抓取,你可能需要import time并添加一个time.sleep(0.5)。 在写这篇文章的时候,雅虎并没有完全扼杀我,而且我能够毫无问题地完成整个过程。 但是,这可能还需要一段时间,尤其取决于您的机器。 但好消息是,我们不需要再做一次! 在实践中,再次,因为这是每日数据,但是,您可能每天都会这样做。

另外,如果你的互联网速度很慢,你不需要做所有的事情,即使只有10次就足够了,所以你可以用for ticker in ticker [:10]或者类似的东西来加快速度。

在下一个教程中,一旦你下载了数据,我们将把我们感兴趣的数据编译成一个pandas DataFrame。

本系列一共12集,如需更新后续内容,请留言告知我~

Python股票分析系列——获得标普500的所有公司股票数据.p6的更多相关文章

  1. Python股票分析系列——自动获取标普500股票列表.p5

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第5部分.在本教程和接下来的几节中,我们将着手研究如何为更多公司提供大量的定价信息,以及如何一次 ...

  2. Python股票分析系列——基础股票数据操作(二).p4

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第4部分.在本教程中,我们将基于Adj Close列创建烛台/ OHLC图,这将允许我介绍重新采 ...

  3. Python股票分析系列——系列介绍和获取股票数据.p1

    本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...

  4. Python股票分析系列——基础股票数据操作(一).p3

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...

  5. Python股票分析系列——数据整理和绘制.p2

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第2部分. 在本教程中,我们将利用我们的股票数据进一步分解一些基本的数据操作和可视化. 我们将要 ...

  6. Python股票分析系列——数据整合.p7

    欢迎来到Python for Finance教程系列的第7部分. 在之前的教程中,我们为整个标准普尔500强公司抓取了雅虎财经数据. 在本教程中,我们将把这些数据组合到一个DataFrame中. 到此 ...

  7. python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据

    python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...

  8. 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据

    财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...

  9. Python数据采集分析告诉你为何上海二手房你都买不起

    感谢关注Python爱好者社区公众号,在这里,我们会每天向您推送Python相关的文章实战干货. 来吧,一起Python. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的 ...

随机推荐

  1. linux:644、755、777权限详解

    第一位7等于4+2+1,rwx,所有者具有读取.写入.执行权限: 第二位5等于4+1+0,r-x,同组用户具有读取.执行权限但没有写入权限: 第三位5,同上,也是r-x,其他用户具有读取.执行权限但没 ...

  2. visual Studio 中使用正则表达式来进行查找替换

    1.打开visual Studio 2. 通过菜单Edit -->Find and Replace -->Replace In File  ,或者使用  ctrl + Shift + H  ...

  3. Python 面向对象的特性2-----继承

    面向对象的三大特性 1.封装 根据职责将属性和方法封装到一个抽象的类中,然后类创建一个实实在在的对象,有了对象以后,就可以访问到对象内部的属性,或者让对象来调用一个已经封装好的方法. 2.继承 实现代 ...

  4. windows 解放鼠标快捷键

    win+ 调整某个窗口的放大缩小靠边站,最小化 窗口间的切换alt+tablealt (按住)+table(一下)+ 上下左右 alt(一下)+table(一下)相邻切换 alt(按住)+tables ...

  5. linux 查看命令 ls-list

    1. ls 基础常用 显示指定目录下的文件列表 list ls -lthr /floder l    长的列表格式 lang 能查看到常用大部分信息 t    按时间先后排序 (sort排序) tim ...

  6. python——函数之生成器

    1 生成器函数的含义    生成器是一个返回可以迭代对象的函数,它是一个特殊的迭代器,但迭代器的抽象层级更高且比较复杂需要实现很多方法.相较迭代器而言,生成器简单使用. 2 生成器的创建方式 2.1 ...

  7. windows入侵

    一, ping 用来检查网 络是否通畅或者网络连接速度的命令.作为一个生 活在网络上的管理员或者黑 客来说, ping 命令是第一个必须掌握的 DOS 命令,所利用的原理是这样的网络上的机器都有唯一确 ...

  8. react 之 reflux 填坑

    注意:老铁些,在看这篇文章的之前,最好了解一下react 的全局状态管理库哦,不然可能会坐飞机. ^_^ React 之reflux (它是一个功能模块,需要安装引入): import Reflux ...

  9. LeetCode算法题-Path Sum III(Java实现)

    这是悦乐书的第227次更新 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第94题(顺位题号是437).您将获得一个二叉树,其中每个节点都包含一个整数值.找到与给定值相加的路径数 ...

  10. 【Linux基础】Linux下软件包管理(rpm-deb-yast-yum)

    软件包管理是指系统中一种安装和维护软件的方法.通常软件以包的形式存储在仓库(repository)中,能满足许多人所有需要的软件. 在GNU/Linux(以下简称Linux)操作系统中,RPM和DPK ...