该系列视频已经搬运至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

最新文章

  1. php 函数汇总
  2. 20套高品质的 Mobile & Web 界面 PSD 素材免费下载
  3. AFNetworking请求设置请求头
  4. 清除TFS版本控制信息
  5. 使用mongo-java-driver3.0.2.jar和mongodb3.0在java代码中的用户验证4
  6. 一步一步实现Linux设备驱动的Helloworld模块
  7. 【学习笔记】【C语言】第一个C程序
  8. http://www.aboutyun.com/thread-8792-1-1.html
  9. C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
  10. 【HDOJ】1239 Calling Extraterrestrial Intelligence Again
  11. 《C语言程序设计现代方法》第2章 C语言基本概念
  12. android studio集成环境搭建
  13. Android 4.0 新增的显示数据集的桌面控件
  14. java数据流
  15. linux Cron 执行Django 任务计划
  16. python-3.x-基本数据类型
  17. 【单片机】基于有方GPRS的智能电梯控制系统
  18. C++ 中递归实现 二项式展开式(a+b)^ n 的表达式
  19. 调整Windows XP 输入法顺序
  20. 关于ARMv8指令的几个问题

热门文章

  1. [转] vi/vim命令模式和编辑模式各种操作
  2. html之css选择器学习
  3. Python 输出格式符号
  4. 我在 Mac 上都用什么
  5. shell 函数用法
  6. Pycharm用鼠标滚轮控制字体大小
  7. 【转】10条你不可不知的css规则
  8. js证书批量生成与打包下载
  9. DP 魔族密码 LIS
  10. ueditor百度编辑器中,多图上传后,图片顺序乱掉的处理方法