前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python在Finance上的应用5 :自动获取是S&P 500的成分股

Python在Finance上的应用5 :自动获取是S&P 500的成分股

作者头像
用户6021891
发布2020-02-10 18:09:59
2K0
发布2020-02-10 18:09:59
举报
文章被收录于专栏:万能的小草万能的小草

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

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

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

维基百科中的代号/符号被组织在table。 为了解决这个问题,我们将使用HTML解析库 Beautiful Soup ,如果你想了解更多关于这个库的,请关注web scraping with Beautiful Soup(https://pythonprogramming.net/introduction-scraping-parsing-beautiful-soup-tutorial/)

首先让我们导入这些库:

import bs4 as bs
import pickle
import requests

bs4是Beautiful Soup,pickle是可以让我们很容易地保存这些公司名单,而不是每次运行时都敲击维基百科(记住及时更新这个清单!),我们将使用 请求从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 Object。

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

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,我们就可以通过简单地搜索可维护的可排序类来查找库存数据表。 我知道指定此表的唯一原因是因为我首先在浏览器中查看了源代码。 可能会有一段时间,你想解析一个不同的网站的股票列表,也许它是在一个table,或者它可能是一个list,也可能是一些div tags。 这只是一个非常具体的解决方案。 本文只是遍历表格:

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

对于每一行,在标题行之后(这就是为什么要写[1:]),说的是股票行情是“表格数据”(td),通过抓住它的.text,将此代码添加到列表 tickers。

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

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

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

完整的代码到目前为止:

import bs4 as bs
import pickle
import requestsdef 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 tickerssave_sp500_tickers()# 获取S&P500 里面的内容 zhujin 注
with open('sp500tickers.pickle', 'rb') as f:
   # The protocol version used is detected automatically, so we do not
   # have to specify it.
   data = pickle.load(f)
   
print('Top 100 list of S&P500 %s' %data[:100])

现在知道了S&P列表,我们将在下一个教程中准备把所有信息都提取出来

英文版请戳: https://pythonprogramming.net/sp500-company-list-python-programming-for-finance/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小草学Python和SQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档