2015年的股市是当下的热门话题,同事的朋友弄了一个简单的弹股吐槽单页面单日PV就能达30W+ ,相当于本博客一年的PV量。所以站在技术角度,这里也写几篇关于股票技术面的文章。首先本篇先从获取A股列表说起。

目的:获取当前上交所和深交所有A股列表。

一、官方站获取

官方站有两个:

所不同的是,深交所直接提供了EXCEL导出的方式

而上交所比较蛋疼,没有直接提供下载页面,所以需要通过页面扒取,在进行页面分析后发现其所有的股市列表藏在JS文件中。如下:

由于只关注A股,所以这里只取上面的js文件中以60开头的股票。该js文件可以通过curl 或 wget获取并可以通过简单的shell 处理后获取:

# JS文件中的数据格式

function get_data(){

var _t = new Array();

_t.push({val:"600000",val2:"浦发银行",val3:"pfyx"});

_t.push({val:"600004",val2:"白云机场",val3:"byjc"});

_t.push({val:"600005",val2:"武钢股份",val3:"wggf"});

_t.push({val:"600006",val2:"东风汽车",val3:"dfqc"});

…………………………

#shell 语句处理后的格式

# by 运维之路(www.361way.com)

[root@361way ~]# wget http://www.sse.com.cn/js/common/ssesuggestdata.js

[root@361way ~]# grep push ssesuggestdata.js |sed s/\[val2,'});',\",val3\]//g|awk -F: '{print $2,$3,$4}'|grep ^60

600000 浦发银行 pfyx

600004 白云机场 byjc

600005 武钢股份 wggf

600006 东风汽车 dfqc

……………………

所以这种方法获取相对比较简单也快捷。当然,也可以使用selenium + python 模拟浏览器访问扒取。后面会单独讲到。

二、第三方站点获取

官方站获取的方法,需要从两个官方站上分别取数据,而第三方站很多会向二个官方站交“ 保护费” ,所以可以通过API 直接取到数据,并且可以将深沪两市的A股数据归拢在一起。国内做的相对较好的主要有以下四家:

这四家中企鹅的做的最人性化,除支持各种排序外,还支持excel 导出。直接是沪深两市A股直接导出。虽然一向不喜欢这只肥企鹅 ,不过事实求是,确实做的不错。另外三家就需要网页爬取了。

三、selenium + python抓数据

相较上面两种方法,这种是最笨的,而且取数据也是最慢的一种方法。不到万不得已,不推荐该方法(能用request、urlib2等模块尽量用),不过由于selenium模块实在牛B,多用于自动化测试和极品抓取环境下,这里权当做学习了。先上代码:

[root@localhost stock]# cat get_sh.py

# -*- encoding: utf-8 -*-

# by 运维之路(361way.com)

import sys

import cPickle

#import pickle

import selenium

from pyvirtualdisplay import Display

display = Display(visible=0, size=(1024, 768))

display.start()

from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0

# from selenium.common.exceptions import TimeoutException

# from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

def wait_condition_01(driver):

return driver.find_element_by_id('dateList_container_pageid')

def extract_table(driver, stocklist):

tag_table= driver.find_element_by_class_name("tablestyle")

tabletext= tag_table.text

stocklist.extend(tabletext.split('\n')[1:])

driver= selenium.webdriver.Firefox()

driver.get("http://www.sse.com.cn/assortment/stock/list/name/")

stocklist= []

extract_table(driver=driver, stocklist=stocklist)

tag_meta= driver.find_element_by_id("staticPagination")

attr_total= int(tag_meta.get_attribute("total"))

attr_pageCount= int(tag_meta.get_attribute("pageCount"))

# 逐页提取内容

for pagenr in range(2, attr_pageCount+1):

id_input= 'dateList_container_pageid' if pagenr > 2 else 'xsgf_pageid'

id_button= 'dateList_container_togo' if pagenr > 2 else 'xsgf_togo'

tag_input= driver.find_element_by_id(id_input)

tag_button= driver.find_element_by_id(id_button)

tag_input.send_keys(str(pagenr))

tag_button.click()

WebDriverWait(driver, 10).until(wait_condition_01)

extract_table(driver=driver, stocklist=stocklist)

# 向主调进程发送结果

data= {

'个股总数': attr_total,

'个股列表': stocklist,

}

driver.quit()

#pdata= pickle.dumps(data, protocol=2)

pdata= cPickle.dumps(data, protocol=2)

sys.stdout.write( pdata + b'\n' )

在使用过程中可能会遇到如下问题:

问题1:直接selenium + python报错

使用后报错如下:

Traceback (most recent call last):

File "", line 1, in

File "/usr/lib/python2.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 64, in __init__

self.binary, timeout),

File "/usr/lib/python2.6/site-packages/selenium/webdriver/firefox/extension_connection.py", line 51, in __init__

self.binary.launch_browser(self.profile)

File "/usr/lib/python2.6/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 70, in launch_browser

self._wait_until_connectable()

File "/usr/lib/python2.6/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 100, in _wait_until_connectable

raise WebDriverException("The browser appears to have exited "

selenium.common.exceptions.WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.

解决方法是加入pyvirtualdisplay模块,并调用如下:

#!/usr/bin/env python

from pyvirtualdisplay import Display

from selenium import webdriver

display = Display(visible=0, size=(1024, 768))

display.start()

browser = webdriver.Firefox()

browser.get('http://www.ubuntu.com/')

print browser.page_source

browser.close()

display.stop()

问题2:selenium + python + pyvirtualdisplay报错

报错内容如下:

>>> from pyvirtualdisplay import Display

>>> from selenium import webdriver

>>> display = Display(visible=0, size=(1024, 768))

Traceback (most recent call last):

File "", line 1, in

File "/usr/lib/python2.6/site-packages/pyvirtualdisplay/display.py", line 33, in __init__

self._obj = self.display_class(

File "/usr/lib/python2.6/site-packages/pyvirtualdisplay/display.py", line 51, in display_class

cls.check_installed()

File "/usr/lib/python2.6/site-packages/pyvirtualdisplay/xvfb.py", line 38, in check_installed

ubuntu_package=PACKAGE).check_installed()

File "/usr/lib/python2.6/site-packages/easyprocess/__init__.py", line 209, in check_installed

raise EasyProcessCheckInstalledError(self)

easyprocess.EasyProcessCheckInstalledError: cmd=['Xvfb', '-help']

OSError=[Errno 2] No such file or directory

Program install error!

从pypi 站点上了解到,其后端需要使用Xvfb 、Xephyr 、Xvnc三者任意一个。这里选了第一个,如下方法安装:

#centos下

yum -y insatll xorg-x11-server-Xvfb

#ubuntu下

sudo apt-get install xvfb

再通过python get_sh.py就可以正常获取数据。取出的列表数据并不直接,还需要近一步处理。

参考页面:

python获取所有a股股票代码_股票量化分析(一)获取A股列表相关推荐

  1. 多线程爬虫获取A股历史行情数据!股票量化分析工具QTYX-V2.2.3

    前言 股票数据的获取是从事股票分析的第一步. 数据获取的途径有很多,对大家来说除了数据的质量以外,获取的效率是第二敏感的点. 市面上有一些股票数据服务平台提供了Python接口来获取数据. 总的来说, ...

  2. python股票量化交易入门到实践_量化资料学习《Python与量化投资从基础到实战》+《量化交易之路用Python做股票量化分析》+《组织与管理研究的实证方法第2版》...

    我们需要利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,重点学习如何高效地利用Python解决投资策略问题,推荐学习<Python与量化投资从基础到实战>等电子资料. ...

  3. garch预测 python_【2019年度合辑】手把手教你用Python做股票量化分析

    引言 不知不觉,2019年已接近尾声,Python金融量化公众号也有一年零两个月.公众号自设立以来,专注于分享Python在金融量化领域的应用,发布了四十余篇原创文章,超过两万人关注.这一路走来,有过 ...

  4. 追击涨停板-支持A股每日涨停分析。股票量化分析工具QTYX-V2.3.8

    前言 目前A股市场的股票每天是有限制最大涨幅的,也就是涨停的概念.比如主板个股最大涨幅是10%,创业板个股最大涨幅是20%等. 对于个股而言并不是随随便便就能被推到涨停板的.或是因为股票发生了重大的利 ...

  5. 选出底部均线粘合,长阳突破的牛股!股票量化分析工具QTYX-V2.5.0

    前言 大牛股在上涨初期往往会有一些特征信号,根据这些特点过滤出可能成为牛股的标的,然后重点跟踪它们,这无疑是非常有效的选股方式. 我们来看下欢瑞世纪这只票上涨初期的特征.股价在区间内上下波动,20日. ...

  6. 选出均线组合多头排列的牛股!股票量化分析工具QTYX-V2.5.6

    前言 有些大牛股启动后会以连续快速的风格,开启一轮势不可挡的上涨. 我们来看下"中油资本"这只票上涨中期的特征.我们观察它的形态特征会发现,它的均线系统以多头排列姿态快速发散.在出 ...

  7. 图形化跟踪个股RPS走势,挖掘出源源不断的牛股!股票量化分析工具QTYX-V2.5.7...

    概述RPS选股策略 威廉·欧奈尔把投资理念集中于他自创的CANSLIM选股系统,凭借着这个系统驰骋股票市场数十年,无论在牛市还是熊市,这个系统都是最稳定.表现最好的系统之一. CANSLIM选股系统中 ...

  8. 用Python做股票量化分析[附量化交易学习资料]

    量化交易的核心是筛选策略,策略也是依靠数学或物理模型来创造,把数学语言变成计算机语言.量化交易的流程是从数据的获取到数据的分析.处理. import pandas as pd import talib ...

  9. 使用同花顺F10查看个股概况!股票量化分析工具QTYX-V2.1.9

    前言 股票分析中选股是很重要的一个环节,特别是在市场走势普遍向好的环境下,选股比择时更为重要. 原因很简单,就是资金的使用效率要最大化. 比如同样的资金在同样的持股时间下,你的股票只涨了10%,大盘涨 ...

最新文章

  1. 傻瓜式的php+mysql伪静态(真实存在的html页面)
  2. 在OpenShift上托管的WildFly实例上进行Arquillian测试
  3. python文件管理包_Python标准库04 文件管理 (部分os包,shutil包)
  4. html:(24):内联式css和嵌入式css
  5. 我们学过 飞鸽传书 的应该知道
  6. 从零开始学TensorFlow 1
  7. Struts2 初探
  8. oracle 的控制结构
  9. 渗透测试工具sqlmap使用技巧-以POST注入为例
  10. c语言实验报告模板电子版,c语言实验报告模板1.pdf
  11. 基于arm板linux的语音合成,基于ARM7和μCLinux的中文电子语音阅读系统的研究与应用...
  12. 安装移动视频监控 即时监控地铁车厢
  13. CAN总线(一)——CAN总线是什么,在哪用,怎么用?
  14. 【愚公系列】2022年09月 微信小程序-WebGL立体图形的绘制
  15. 开源软件负载均衡方案比较
  16. 随机创建圆形、三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长
  17. ArcGIS Pro二次开发环境配置及项目创建示例
  18. Julia是什么?为什么突然这么火?
  19. IC学习笔记1——建立时间和保持时间
  20. 洛谷P2455 [SDOI2006]线性方程组

热门文章

  1. 采访优秀学长学姐后的感悟与体会
  2. QQ邮箱的一些bug
  3. 计算机 蚂蚁搬家 教案,小班蚂蚁搬家的教案
  4. word2010取消页眉中的横线
  5. HBase2.x完全分布式集群安装
  6. 树莓派开机启动python文件_树莓派开机自启动Py文件
  7. 高级刀片服务器系统,刀片服务器系统
  8. beyond compare 过期解决方法
  9. JAVA-打印星号三角形
  10. c语言用星号输出大写字母H,如何在C语言中用星号或自定义字符打印方形图案