Python股票分析系列——自动获取标普500股票列表.p5
该系列视频已经搬运至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的更多相关文章
- Python股票分析系列——基础股票数据操作(二).p4
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第4部分.在本教程中,我们将基于Adj Close列创建烛台/ OHLC图,这将允许我介绍重新采 ...
- Python股票分析系列——系列介绍和获取股票数据.p1
本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...
- python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...
- Python股票分析系列——基础股票数据操作(一).p3
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...
- Python股票分析系列——数据整理和绘制.p2
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第2部分. 在本教程中,我们将利用我们的股票数据进一步分解一些基本的数据操作和可视化. 我们将要 ...
- Spring Ioc源码分析系列--自动注入循环依赖的处理
Spring Ioc源码分析系列--自动注入循环依赖的处理 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到Spring创建bean出现循环依赖的时候并没有深入去分 ...
- C#分析URL参数获取参数和值得对应列表
原文: C#分析URL参数获取参数和值得对应列表 /// <summary> /// 分析url链接,返回参数集合 /// </summary> /// <param n ...
- C#分析URL参数获取参数和值得对应列表(一)
C#操作Url参数 http://www.cnblogs.com/RobotH/archive/2008/11/17/1335322.html 用 C# 分析 URL 中的参数信息 http://ww ...
- Python股票分析系列——获得标普500的所有公司股票数据.p6
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第6部分. 在之前的Python教程中,我们介绍了如何获取我们感兴趣的公司名单(在我们的案例中是 ...
随机推荐
- JavaScript中的原型链和继承
理解原型链 在 JavaScript 的世界中,函数是一等公民. 上面这句话在很多地方都看到过.用我自己的话来理解就是:函数既当爹又当妈."当爹"是因为我们用函数去处理各种&quo ...
- 编程一小时 code.org [六一关注]
编程一小时活动的组织者是Code.org, 它是一个面向公众的公益组织,致力于在更多的学校推广计算机科学教育,并为女性和就业率低的有色人种学生学习计算机的机会.同时,一个空前强大的合作伙伴联盟也在支持 ...
- Symantec Backup Exec 2010 安装报 bad ELF interpreter: No such file or directory
在64位的Red Hat Enterprise Linux Server release 6.6上安装Symantec Backup Exec 2010时, 遇到下面错误: # ./installra ...
- ORA-01440: column to be modified must be empty to decrease precision or scale
在修改表字段的NUMBER类型的精度或刻度时,你可能会遇到ORA-01440: column to be modified must be empty to decrease precision or ...
- [20190321]smem的显示缺陷.txt
[20190321]smem的显示缺陷.txt1.smem 加入-m参数显示存在缺陷,map的信息不全:# smem -tk -m -U oracle -P "oraclepeis|ora_ ...
- [20190319]shared pool latch与library cache latch的简单探究.txt
[20190319]shared pool latch与library cache latch的简单探究.txt --//昨天看Oracle DBA手记3:数据库性能优化与内部原理解析.pdf 电子书 ...
- mssql instead of 触发器应用一-创建只读视图(view)的方法
转自: http://www.maomao365.com/?p=4906 <span style="color:white;background-color:blue;font-wei ...
- python3+正则表达式爬取 猫眼电影
'''Request+正则表达式抓取猫眼电影TOP100内容''' import requests from requests.exceptions import RequestException i ...
- php函数long2ip与ip2long()
long2ip - Converts an long integer address into a string in (IPv4) Internet standard dotted format s ...
- March 03rd, 2018 Week 9th Saturday
No cross, no crown. 不经历风雨,怎能见彩虹. Sometimes you can see a beautiful rainbow high in the sky without h ...