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

欢迎来到Python for Finance教程系列的第5部分。在本教程和接下来的几节中,我们将着手研究如何为更多公司提供大量的定价信息,以及如何一次处理所有这些数据。

首先,我们需要一份公司名单。我可以给你一个清单,但实际上获得股票清单可能只是你可能遇到的众多挑战之一。在我们的案例中,我们需要一个标准普尔500公司的Python列表。

无论您是在寻找道琼斯公司,标准普尔500指数还是罗素3000指数,都有可能在某个地方发布了这些公司的帖子。你会想确保它是最新的,但它可能还不是完美的格式。在我们的例子中,我们将从维基百科获取列表:http://en.wikipedia.org/wiki/List_of_S%26P_500_companies。

维基百科中的代号/符号组织在一张桌子上。为了解决这个问题,我们将使用HTML解析库,Beautiful Soup。

首先,我们从一些库开始:

import bs4 as bs
import pickle
import requests

bs4是beautifulsoup,pickle让我们可以很容易地保存这些公司名单,而不是每次运行时都敲击维基百科(尽管记住,及时更新这个清单!),我们将使用requests从Wikipedia的页面获取源代码。

开始我们的功能:

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'})

首先,我们访问维基百科页面,并给出响应,其中包含我们的源代码。为了对待我们想要的源代码,我们希望访问.text属性,我们使用BeautifulSoup转向soup。如果您不熟悉BeautifulSoup为您所做的工作,它基本上将源代码转换为BeautifulSoup对象,突然可以将其视为更典型的Python对象。

有一次维基百科试图拒绝对Python的访问。目前,在我写这篇文章的时候,代码的工作原理没有改变头文件。如果您发现原始源代码(resp.text)似乎不像您在家用计算机上看到的那样返回相同页面,请添加以下内容并更改resp var code:

    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17'}
resp = requests.get('http://en.wikipedia.org/wiki/List_of_S%26P_500_companies',
headers=headers)

一旦我们有了我们的soup,我们可以通过简单地搜索 wikitable sortable classes。我知道指定此表的唯一原因是因为我首先在浏览器中查看了源代码。可能会有一段时间,你想解析一个不同的网站的股票列表,也许它是在一个表中,或者它可能是一个列表,也可能是一些div标签。这只是一个非常具体的解决方案。从这里开始,我们只是遍历表格:

    tickers = []
for row in table.findAll('tr')[1:]:
ticker = row.findAll('td')[0].text
tickers.append(ticker)

对于每一行,在标题行之后(这就是为什么我们要从[1:]开始),我们说的是股票行情是“table data”(td),我们抓住它的.text,我们将此代码添加到我们的列表中。

现在,如果我们可以保存这份清单,那就太好了。我们将为此使用pickle模块,它为我们序列化Python对象。

    with open("sp500tickers.pickle","wb") as f:
pickle.dump(tickers,f) return tickers

我们希望继续并保存这些内容,这样我们就不用每天多次请求维基百科。在任何时候,我们都可以更新这个列表,或者我们可以编程它每月检查一次......等等。

完整的代码到目前为止:

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 save_sp500_tickers()

现在我们知道了代号,我们准备好将所有信息都提取出来,这是我们将在下一个教程中做的事情。

下一篇教程:Python股票分析系列——获得标普500的所有公司股票数据.p6

Python股票分析系列——自动获取标普500股票列表.p5的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Spring Ioc源码分析系列--自动注入循环依赖的处理

    Spring Ioc源码分析系列--自动注入循环依赖的处理 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到Spring创建bean出现循环依赖的时候并没有深入去分 ...

  7. C#分析URL参数获取参数和值得对应列表

    原文: C#分析URL参数获取参数和值得对应列表 /// <summary> /// 分析url链接,返回参数集合 /// </summary> /// <param n ...

  8. C#分析URL参数获取参数和值得对应列表(一)

    C#操作Url参数 http://www.cnblogs.com/RobotH/archive/2008/11/17/1335322.html 用 C# 分析 URL 中的参数信息 http://ww ...

  9. Python股票分析系列——获得标普500的所有公司股票数据.p6

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第6部分. 在之前的Python教程中,我们介绍了如何获取我们感兴趣的公司名单(在我们的案例中是 ...

随机推荐

  1. matlab练习程序(最小二乘多项式拟合)

    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...

  2. mac下编译node源码

    看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...

  3. Charles 抓包手机app

    最近在测为移动端提供的API, 使用mac系统, 发现fiddler在mac下无法使用, 不知道其他朋友是否遇见过, 只能找替代工具. 先去百度上搜索下载Charles 破解版, 选择Charles是 ...

  4. Hibernate设置事务的隔离级别

    方式有两种: 1)修改配置文件hibernate.cfg.xml实现 <hibernate-configuration> <session-factory> ...... &l ...

  5. web前端(14)—— JavaScript的数据类型,语法规范1

    编辑器选择 对js的编辑器选用,有很多,能对html编辑的,也能对js编辑,比如notepad++,visual studio code,webstom,atom,pycharm,sublime te ...

  6. 消除Warning: Using a password on the command line interface can be insecure的提示

    最近在部署Zabbix时需要用脚本取得一些MySQL的返回参数,需要是numberic格式的,但是调用脚本时总是输出这一句: Warning: Using a password on the comm ...

  7. Lua不显示小数点0的部分

    我的环境:Unity3D 5.3.7p4 XLua版本v2.1.6 基于Lua5.3 (https://github.com/Tencent/xLua) 在Lua中数字不区分整型或浮点型,所有都是nu ...

  8. PHP实现类似题库抽题效果

    PHP实现类似题库抽题效果 大家好,我顾某人又回来了,最近学了一点PHP,然后就想写个简单小例子试试,于是就写了一个类似于从题库抽题的东西,大概就是先输入需要抽题的数量,然后从数据库中随机抽取题目. ...

  9. February 25th, 2018 Week 9th Sunday

    LIfe is about making an impact, not making an income. 生命在于影响他人,而非赚钱糊口. From Kevin Kruse. You probabl ...

  10. Teradata的DBQL使用

    1.赋权 grant exec on DBC.DBQLAccessMacro to Sysdba with grant option; 2.刷新DBQL或TDWM缓存到磁盘,立即能在数据库中查询到刚刚 ...