python获取所有a股股票代码_股票量化分析(一)获取A股列表
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股列表相关推荐
- 多线程爬虫获取A股历史行情数据!股票量化分析工具QTYX-V2.2.3
前言 股票数据的获取是从事股票分析的第一步. 数据获取的途径有很多,对大家来说除了数据的质量以外,获取的效率是第二敏感的点. 市面上有一些股票数据服务平台提供了Python接口来获取数据. 总的来说, ...
- python股票量化交易入门到实践_量化资料学习《Python与量化投资从基础到实战》+《量化交易之路用Python做股票量化分析》+《组织与管理研究的实证方法第2版》...
我们需要利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,重点学习如何高效地利用Python解决投资策略问题,推荐学习<Python与量化投资从基础到实战>等电子资料. ...
- garch预测 python_【2019年度合辑】手把手教你用Python做股票量化分析
引言 不知不觉,2019年已接近尾声,Python金融量化公众号也有一年零两个月.公众号自设立以来,专注于分享Python在金融量化领域的应用,发布了四十余篇原创文章,超过两万人关注.这一路走来,有过 ...
- 追击涨停板-支持A股每日涨停分析。股票量化分析工具QTYX-V2.3.8
前言 目前A股市场的股票每天是有限制最大涨幅的,也就是涨停的概念.比如主板个股最大涨幅是10%,创业板个股最大涨幅是20%等. 对于个股而言并不是随随便便就能被推到涨停板的.或是因为股票发生了重大的利 ...
- 选出底部均线粘合,长阳突破的牛股!股票量化分析工具QTYX-V2.5.0
前言 大牛股在上涨初期往往会有一些特征信号,根据这些特点过滤出可能成为牛股的标的,然后重点跟踪它们,这无疑是非常有效的选股方式. 我们来看下欢瑞世纪这只票上涨初期的特征.股价在区间内上下波动,20日. ...
- 选出均线组合多头排列的牛股!股票量化分析工具QTYX-V2.5.6
前言 有些大牛股启动后会以连续快速的风格,开启一轮势不可挡的上涨. 我们来看下"中油资本"这只票上涨中期的特征.我们观察它的形态特征会发现,它的均线系统以多头排列姿态快速发散.在出 ...
- 图形化跟踪个股RPS走势,挖掘出源源不断的牛股!股票量化分析工具QTYX-V2.5.7...
概述RPS选股策略 威廉·欧奈尔把投资理念集中于他自创的CANSLIM选股系统,凭借着这个系统驰骋股票市场数十年,无论在牛市还是熊市,这个系统都是最稳定.表现最好的系统之一. CANSLIM选股系统中 ...
- 用Python做股票量化分析[附量化交易学习资料]
量化交易的核心是筛选策略,策略也是依靠数学或物理模型来创造,把数学语言变成计算机语言.量化交易的流程是从数据的获取到数据的分析.处理. import pandas as pd import talib ...
- 使用同花顺F10查看个股概况!股票量化分析工具QTYX-V2.1.9
前言 股票分析中选股是很重要的一个环节,特别是在市场走势普遍向好的环境下,选股比择时更为重要. 原因很简单,就是资金的使用效率要最大化. 比如同样的资金在同样的持股时间下,你的股票只涨了10%,大盘涨 ...
最新文章
- 傻瓜式的php+mysql伪静态(真实存在的html页面)
- 在OpenShift上托管的WildFly实例上进行Arquillian测试
- python文件管理包_Python标准库04 文件管理 (部分os包,shutil包)
- html:(24):内联式css和嵌入式css
- 我们学过 飞鸽传书 的应该知道
- 从零开始学TensorFlow 1
- Struts2 初探
- oracle 的控制结构
- 渗透测试工具sqlmap使用技巧-以POST注入为例
- c语言实验报告模板电子版,c语言实验报告模板1.pdf
- 基于arm板linux的语音合成,基于ARM7和μCLinux的中文电子语音阅读系统的研究与应用...
- 安装移动视频监控 即时监控地铁车厢
- CAN总线(一)——CAN总线是什么,在哪用,怎么用?
- 【愚公系列】2022年09月 微信小程序-WebGL立体图形的绘制
- 开源软件负载均衡方案比较
- 随机创建圆形、三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长
- ArcGIS Pro二次开发环境配置及项目创建示例
- Julia是什么?为什么突然这么火?
- IC学习笔记1——建立时间和保持时间
- 洛谷P2455 [SDOI2006]线性方程组