获取A股每天的涨停板数据,起始日期和截止日期都可以自定义。

这个数据可以用来后续的大数据分析,比如统计每天涨停板的数目和大盘指数的相关性,涨停打开次数与当日人气的强弱的关系。

点击查看大图

python代码(pyhton2版本,另外最下面有python3版本的代码实现):# -*- coding=utf-8 -*-

import datetime

__author__ = 'Rocky'

'''

http://30daydo.com

Contact: weigesysu@qq.com

'''

# 每天的涨跌停

import urllib2, re, time, xlrd, xlwt, sys, os

import setting

import pandas as pd

import tushare as ts

from setting import LLogger

reload(sys)

sys.setdefaultencoding('gbk')

logger = LLogger('zdt.log')

class GetZDT:

def __init__(self,current):

self.user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/64.0.3282.167 Chrome/64.0.3282.167 Safari/537.36"

# self.today = time.strftime("%Y%m%d")

self.today=current

self.path = os.path.join(os.path.dirname(__file__), 'data')

self.zdt_url = 'http://home.flashdata2.jrj.com.cn/limitStatistic/ztForce/' + self.today + ".js"

self.zrzt_url = 'http://hqdata.jrj.com.cn/zrztjrbx/limitup.js'

self.host = "home.flashdata2.jrj.com.cn"

self.reference = "http://stock.jrj.com.cn/tzzs/z ... ot%3B

self.header_zdt = {"User-Agent": self.user_agent,

"Host": self.host,

"Referer": self.reference}

self.zdt_indexx = [u'代码', u'名称', u'最新价格', u'涨跌幅', u'封成比', u'封流比', u'封单金额', u'最后一次涨停时间', u'第一次涨停时间', u'打开次数',

u'振幅',

u'涨停强度']

self.zrzt_indexx = [u'序号', u'代码', u'名称', u'昨日涨停时间', u'最新价格', u'今日涨幅', u'最大涨幅', u'最大跌幅', u'是否连板', u'连续涨停次数',

u'昨日涨停强度', u'今日涨停强度', u'是否停牌', u'昨天的日期', u'昨日涨停价', u'今日开盘价格', u'今日开盘涨幅']

self.header_zrzt = {"User-Agent": self.user_agent,

"Host": "hqdata.jrj.com.cn",

"Referer": "http://stock.jrj.com.cn/tzzs/zrztjrbx.shtml"

}

def getdata(self, url, headers, retry=5):

req = urllib2.Request(url=url, headers=headers)

for i in range(retry):

try:

resp = urllib2.urlopen(req,timeout=20)

content = resp.read()

md_check = re.findall('summary|lasttradedate',content)

if content and len(md_check)>0:

return content

else:

time.sleep(60)

logger.log('failed to get content, retry: {}'.format(i))

continue

except Exception, e:

logger.log(e)

time.sleep(60)

continue

return None

def convert_json(self, content):

p = re.compile(r'"Data":(.*)};', re.S)

if len(content)<=0:

logger.log('Content\'s length is 0')

exit(0)

result = p.findall(content)

if result:

try:

# print result

t1 = result[0]

t2 = list(eval(t1))

return t2

except Exception,e:

logger.log(e)

return None

else:

return None

def save_to_dataframe(self, data, indexx, choice, post_fix):

engine = setting.get_engine('db_zdt')

if not data:

exit()

data_len = len(data)

if choice == 1:

for i in range(data_len):

data[choice] = data[choice].decode('gbk')

df = pd.DataFrame(data, columns=indexx)

filename = os.path.join(self.path, self.today + "_" + post_fix + ".xls")

if choice == 1:

df[u'今天的日期']=self.today

df.to_excel(filename, encoding='gbk')

try:

df.to_sql(self.today + post_fix, engine, if_exists='fail')

except Exception,e:

logger.log(e)

def storedata(self):

zdt_content = self.getdata(self.zdt_url, headers=self.header_zdt)

logger.log('zdt Content'+zdt_content)

zdt_js = self.convert_json(zdt_content)

self.save_to_dataframe(zdt_js, self.zdt_indexx, 1, 'zdt')

time.sleep(5)

if __name__ == '__main__':

date_list = [datetime.datetime.strftime(i,'%Y%m%d') for i in list(pd.date_range('20170401','20171231'))]

for today in date_list:

if not ts.is_holiday(datetime.datetime.strptime(today,'%Y%m%d').strftime('%Y-%m-%d')):

print today

obj = GetZDT(today)

obj.storedata()

else:

logger.log('Holiday')

python3代码:# -*- coding=utf-8 -*-

__author__ = 'Rocky'

'''

http://30daydo.com

Contact: weigesysu@qq.com

'''

# 每天的涨跌停

import re

import time

import xlrd

import xlwt

import sys

import os

import setting

from setting import is_holiday, DATA_PATH

import pandas as pd

import tushare as ts

from setting import llogger

import requests

from send_mail import sender_139

import datetime

# reload(sys)

# sys.setdefaultencoding('gbk')

logger = llogger(__file__)

class GetZDT:

def __init__(self):

self.user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/64.0.3282.167 Chrome/64.0.3282.167 Safari/537.36"

self.today = time.strftime("%Y%m%d")

self.path = DATA_PATH

self.zdt_url = 'http://home.flashdata2.jrj.com.cn/limitStatistic/ztForce/' + \

self.today + ".js"

self.zrzt_url = 'http://hqdata.jrj.com.cn/zrztjrbx/limitup.js'

self.host = "home.flashdata2.jrj.com.cn"

self.reference = "http://stock.jrj.com.cn/tzzs/z ... ot%3B

self.header_zdt = {"User-Agent": self.user_agent,

"Host": self.host,

"Referer": self.reference}

self.zdt_indexx = [u'代码', u'名称', u'最新价格', u'涨跌幅', u'封成比', u'封流比', u'封单金额', u'最后一次涨停时间', u'第一次涨停时间', u'打开次数',

u'振幅',

u'涨停强度']

self.zrzt_indexx = [u'序号', u'代码', u'名称', u'昨日涨停时间', u'最新价格', u'今日涨幅', u'最大涨幅', u'最大跌幅', u'是否连板', u'连续涨停次数',

u'昨日涨停强度', u'今日涨停强度', u'是否停牌', u'昨天的日期', u'昨日涨停价', u'今日开盘价格', u'今日开盘涨幅']

self.header_zrzt = {"User-Agent": self.user_agent,

"Host": "hqdata.jrj.com.cn",

"Referer": "http://stock.jrj.com.cn/tzzs/zrztjrbx.shtml"

}

def getdata(self, url, headers, retry=5):

for i in range(retry):

try:

resp = requests.get(url=url, headers=headers)

content = resp.text

md_check = re.findall('summary|lasttradedate', content)

if content and len(md_check) > 0:

return content

else:

time.sleep(60)

logger.info('failed to get content, retry: {}'.format(i))

continue

except Exception as e:

logger.info(e)

time.sleep(60)

continue

return None

def convert_json(self, content):

p = re.compile(r'"Data":(.*)};', re.S)

if len(content) <= 0:

logger.info('Content\'s length is 0')

exit(0)

result = p.findall(content)

if result:

try:

# print(result)

t1 = result[0]

t2 = list(eval(t1))

return t2

except Exception as e:

logger.info(e)

return None

else:

return None

# 2016-12-27 to do this

def save_excel(self, date, data):

# data is list type

w = xlwt.Workbook(encoding='gbk')

ws = w.add_sheet(date)

excel_filename = date + ".xls"

# sheet=open_workbook(excel_filenme)

# table=wb.sheets()[0]

xf = 0

ctype = 1

rows = len(data)

point_x = 1

point_y = 0

ws.write(0, 0, u'代码')

ws.write(0, 1, u'名称')

ws.write(0, 2, u'最新价格')

ws.write(0, 3, u'涨跌幅')

ws.write(0, 4, u'封成比')

ws.write(0, 5, u'封流比')

ws.write(0, 6, u'封单金额')

ws.write(0, 7, u'第一次涨停时间')

ws.write(0, 8, u'最后一次涨停时间')

ws.write(0, 9, u'打开次数')

ws.write(0, 10, u'振幅')

ws.write(0, 11, u'涨停强度')

print("Rows:%d" % rows)

for row in data:

rows = len(data)

cols = len(row)

point_y = 0

for col in row:

# print(col)

# table.put_cell(row,col,)

# print(col)

ws.write(point_x, point_y, col)

# print("[%d,%d]" % (point_x, point_y))

point_y = point_y + 1

point_x = point_x + 1

w.save(excel_filename)

def save_to_dataframe(self, data, indexx, choice, post_fix):

engine = setting.get_engine('db_zdt')

if not data:

exit()

data_len = len(data)

if choice == 1:

for i in range(data_len):

data[i][choice] = data[i][choice]

df = pd.DataFrame(data, columns=indexx)

filename = os.path.join(

self.path, self.today + "_" + post_fix + ".xls")

# 今日涨停

if choice == 1:

df['今天的日期'] = self.today

df.to_excel(filename, encoding='gbk')

try:

df.to_sql(self.today + post_fix, engine, if_exists='fail')

except Exception as e:

logger.info(e)

# 昨日涨停

if choice == 2:

df = df.set_index(u'序号')

df[u'最大涨幅'] = df[u'最大涨幅'].map(lambda x: round(x * 100, 3))

df[u'最大跌幅'] = df[u'最大跌幅'].map(lambda x: round(x * 100, 3))

df[u'今日开盘涨幅'] = df[u'今日开盘涨幅'].map(lambda x: round(x * 100, 3))

df[u'昨日涨停强度'] = df[u'昨日涨停强度'].map(lambda x: round(x, 0))

df[u'今日涨停强度'] = df[u'今日涨停强度'].map(lambda x: round(x, 0))

try:

df.to_sql(self.today + post_fix, engine, if_exists='fail')

except Exception as e:

logger.info(e)

avg = round(df['今日涨幅'].mean(), 2)

current = datetime.datetime.now().strftime('%Y-%m-%d')

title = '昨天涨停个股今天{}\n的平均涨幅{}\n'.format(current, avg)

try:

sender_139(title, title)

except Exception as e:

print(e)

# 昨日涨停今日的状态,今日涨停

def storedata(self):

zdt_content = self.getdata(self.zdt_url, headers=self.header_zdt)

logger.info('zdt Content' + zdt_content)

zdt_js = self.convert_json(zdt_content)

self.save_to_dataframe(zdt_js, self.zdt_indexx, 1, 'zdt')

time.sleep(0.5)

zrzt_content = self.getdata(self.zrzt_url, headers=self.header_zrzt)

logger.info('zrzt Content' + zdt_content)

zrzt_js = self.convert_json(zrzt_content)

self.save_to_dataframe(zrzt_js, self.zrzt_indexx, 2, 'zrzt')

if __name__ == '__main__':

# today='2018-04-16'

# 填补以前的数据

# x=pd.date_range('20170101','20180312')

# date_list = [datetime.datetime.strftime(i,'%Y%m%d') for i in list(pd.date_range('20170401','20171231'))

if is_holiday():

logger.info('Holiday')

exit()

logger.info("start")

obj = GetZDT()

obj.storedata()

原创。

转载请注明出处。

http://30daydo.com/article/295

[/i][/i][/code]

欢迎关注公众号:可转债量化分析

python读取excel股票历史数据_python获取涨停板历史数据相关推荐

  1. python读取excel写入数据库_python实现读取excel写入mysql的小工具详解

    Python是数据分析的强大利器 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python如何读取excel,并使 ...

  2. python读取excel图片尺寸_Python读取excel中的图片完美解决方法

    excel中有图片是很常见的,但是通过python读取excel中的图片没有很好的解决办法. 网上找了一种很聪明的方法,原理是这样的: 1.将待读取的excel文件后缀名改成zip,变成压缩文件. 2 ...

  3. python读取excel股票历史数据_python实例:从excel读取股票代码,爬取股票信息写到代码后面的单元格中...

    #本脚本主要实现循环爬取数据后:#1.同一类数据统一写入到同一个数组中,#2.读取数组数据写入指定的excel列中,实现最终数据爬取 import xlrd #引入读取excel库 import re ...

  4. python 读取excel太慢_Python 读取excel并转换为字典

    方法一:利用利用xlrd读取excel文件 其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可. 1.安装 xlrd pip install xlrd 2.读取文 ...

  5. 利用python读取excel中的公司名称获取公司的经营范围并回填进excel中

    前几天朋友托我帮完成一份地区教育类型公司的经营范围,表中已经有了公司的名称及地点等信息,但是还缺少经营范围,由于数据量比较大,一个一个的去百度搜再复制到表里,工作量有点大,可能需要我好几天不吃不喝的C ...

  6. python 涨停统计_python获取涨停板历史数据

    获取A股每天的涨停板数据,起始日期和截止日期都可以自定义. 这个数据可以用来后续的大数据分析,比如统计每天涨停板的数目和大盘指数的相关性,涨停打开次数与当日人气的强弱的关系. 点击查看大图 pytho ...

  7. python读取时间序列csv可视化_Python获取时序数据并进行可视化分析

    本帖最后由 林宝宝 于 2019-7-31 17:29 编辑 问题导读: 1.获取第三方平台的接口数据的方法是什么? 2.怎么做数据清洗与合并?主要有数据类型转换.重新排序.索引重置.数据合并 3.时 ...

  8. python读取excel写入数据库_python读取Excel内容并写入MySQL数据库脚本

    准备Excel(test.xlsx) 导库 import pymysql import xlrd 完整代码 import pymysql import xlrd def connect_databas ...

  9. xlrd python读取excel 编码错误_python读取excel数据报xlrd.biffh.XLRDError错误原因

    比如说我要读取 http://basic.10jqka.com.cn/600383/xls/Important_declaredate.xls 的数据信息,用的是xlrd程序包. import xlr ...

最新文章

  1. 人工智能产业的发展是什么样的呢?
  2. 马云口中的“计划经济”其实是一种大数据和人工智能
  3. 计算机科学与技术的程序设计基础,程序设计基础
  4. 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
  5. Python常用语句及流程控制
  6. Redis在Windows上编译
  7. [Linux].netrc或者_netrc使用可以
  8. 优化定制化abap代码必须遵守的经典黄金规则
  9. Coding and Paper Letter(十四)
  10. qt自带静态代码检测工具_两款静态代码检测工具的对比
  11. 实践解析可视化开发平台FlinkSever优势
  12. python入门先学什么-所以学完 Python 入门课的孩子到底能干啥?
  13. 验证码的旋转与放缩代码
  14. java二进制运算符
  15. nuxt.js局部引入js获取ip地址
  16. ipad wifi信号测试软件,iPad3的wifi信号弱 二种方法修复WiFi信号
  17. 必读的20本投资经典
  18. ASCII码一览表,ASCII码对照表
  19. 星际争霸2 AI 开发探索与展望
  20. Downward API,它的作用是:让 Pod 里的容器能够直接获取到这个 Pod API 对象本身的信息。

热门文章

  1. freebsd运行Linux软件,FreeBSD 常用软件
  2. TPFanControl.ini
  3. thinkpad x200 自己更换风扇的步骤和更换后的调整
  4. 劳动合同法解读二十:试用期工资
  5. 《黑客帝国》用python实现中文代码雨
  6. arcgis10之多属性字段添加
  7. 我的第一个C#程序-智能拼图游戏
  8. 【tools】Meterpreter 操作汇总
  9. I5 4590 台式机安装黑苹果再次入坑记(2019.12.23)
  10. 微软杀毒软件6月1日正式上市 暂不进入中国市场(转)