该系列视频已经搬运至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. (python)数据结构------列表

    一.数字的处理函数 (一)int() 取整数部分,与正负号无关,举例如下: print(int(-3.6), int(-2.5), int(-1.4)) print(int(3.6), int(2.5 ...

  2. raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘

    Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...

  3. jQuery ajax()使用serialize()提交form数据到后台

    1.选中要删除的学生信息 2.点击 删除选中 按钮,把复选框中的值取出提交到后台 3.后台获取选中的id 4.前端也跟着删除数据 示例代码: 前端代码: <!DOCTYPE html> & ...

  4. (转载)关于usr/bin/ld: cannot find -lxxx问题总结

    usr/bin/ld: cannot find -lxxx问题总结 linux下编译应用程序常常会出现如下错误:   /usr/bin/ld: cannot find -lxxx        意思是 ...

  5. Vue学习之路4-v-bind指令

    1. 定义 1.1 v-bind 指令被用来响应地更新 HTML 属性,其实它是支持一个单一 JavaScript 表达式 (v-for 除外). 2. 语法 2.1 完整语法:<span v- ...

  6. Linux 小知识翻译 - 「GCC」

    这次聊聊「GCC」. GCC是「GNU Compiler Collection」的简称,由C.C++.FORTRAN.Java等语言的编译器以及这些语言的库所组成. GCC不仅包含编译器本身,还包含了 ...

  7. 线程--实现Runnable接口

    实现Runnable接口,创建线程步骤: 1.定义类,并实现Runnable接口 2.重写Runnable接口中的run()方法 3.通过Thread类建立线程对象 4.将实现了Runnable接口的 ...

  8. 寒假训练——搜索——C - Robot

    The Robot Moving Institute is using a robot in their local store to transport different items. Of co ...

  9. Java基础知识点(二)

    前言:Java的基础知识点不能间断. 1.Array和ArrayList的区别 关于Array的用法,参看:http://blog.csdn.net/b_11111/article/details/5 ...

  10. JWT(JSON Web Token)

    摘要: 在Web应用中,使用JWT替代session并不是个好主意 适合JWT的使用场景 抱歉,当了回标题党.我并不否认JWT的价值,只是它经常被误用. 什么是JWT 根据维基百科的定义,JSON W ...