代码拉取完成,页面将自动刷新
# -*- 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
from setting import llogger,get_mysql_conn
import requests
from send_mail import sender_139
import datetime
import tushare as ts
filename=os.path.basename(__file__)
logger = llogger('log/'+filename)
class GetZDT:
def __init__(self,today):
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"
if today is None:
self.today = time.strftime("%Y%m%d")
else:
self.today = today
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/zdtwdj/zdforce.shtml"
self.header_zdt = {"User-Agent": self.user_agent,
"Host": self.host,
"Referer": self.reference}
self.zdt_indexx = ['代码', '名称', '最新价格', '涨跌幅', '封成比', '封流比', '封单金额', '最后一次涨停时间', '第一次涨停时间', '打开次数',
'振幅',
'涨停强度']
self.zrzt_indexx = ['序号', '代码', '名称', '昨日涨停时间', '最新价格', '今日涨幅', '最大涨幅', '最大跌幅', '是否连板', '连续涨停次数',
'昨日涨停强度', '今日涨停强度', '是否停牌', '昨天的日期', '昨日涨停价', '今日开盘价格', '今日开盘涨幅']
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:
sender_139('获取涨跌停数据出错','{}'.format(e))
logger.error(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=re.sub('[\\r\\n]', '', t1)
t2=re.sub(',,',',0,0',t2)
t2 = re.sub('Infinity','-1',t2)
t2 = re.sub('NaN','-1',t2)
t2 = list(eval(t2))
return t2
except Exception as e:
sender_139('获取涨跌停数据出错','e{}'.format(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, '代码')
ws.write(0, 1, '名称')
ws.write(0, 2, '最新价格')
ws.write(0, 3, '涨跌幅')
ws.write(0, 4, '封成比')
ws.write(0, 5, '封流比')
ws.write(0, 6, '封单金额')
ws.write(0, 7, '第一次涨停时间')
ws.write(0, 8, '最后一次涨停时间')
ws.write(0, 9, '打开次数')
ws.write(0, 10, '振幅')
ws.write(0, 11, '涨停强度')
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('序号')
df['最大涨幅'] = df['最大涨幅'].map(lambda x: round(x * 100, 3))
df['最大跌幅'] = df['最大跌幅'].map(lambda x: round(x * 100, 3))
df['今日开盘涨幅'] = df['今日开盘涨幅'].map(lambda x: round(x * 100, 3))
df['昨日涨停强度'] = df['昨日涨停强度'].map(lambda x: round(x, 0))
df['今日涨停强度'] = df['今日涨停强度'].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)
median = round(df['今日涨幅'].median(), 2)
min_v = round(df['今日涨幅'].min(), 2)
current = datetime.datetime.now().strftime('%Y-%m-%d')
title = '昨天涨停个股今天{}\n的平均涨幅{}\n'.format(current, avg)
content = '昨天涨停个股今天{}\n的平均涨幅{}\n涨幅中位数{}\n涨幅最小{}\n'.format(current,avg,median,min_v)
# try:
# sender_139(title, content)
# 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' + zrzt_content)
zrzt_js = self.convert_json(zrzt_content)
self.save_to_dataframe(zrzt_js, self.zrzt_indexx, 2, 'zrzt')
if __name__ == '__main__':
# 填补以前的数据
# date_list = [i for i in list(pd.date_range('20180921','20190101'))]
# conn = get_mysql_conn('db_zdt','local')
# cursor = conn.cursor()
# for d in date_list:
# x=datetime.datetime.strftime(d, '%Y%m%d')
# y=datetime.datetime.strftime(d, '%Y-%m-%d')
# if ts.is_holiday(y):
# continue
# print(y)
# check_cmd ='select 1 from `{}zdt`'.format(x)
# try:
# cursor.execute(check_cmd)
# except Exception as e:
# print(e)
# obj = GetZDT(x)
# obj.storedata()
# else:
# ret = cursor.fetchone()
# print(ret)
# continue
if is_holiday():
logger.info('Holiday')
exit()
logger.info("start")
obj = GetZDT(None)
obj.storedata()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。