使用python实时获取股票数据并保存数据库
使用python实时获取股票数据并保存数据库
·
1、创建数据表
股票列表数据表
CREATE TABLE `fa_shares` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL COMMENT '股票名称',
`code` varchar(30) DEFAULT NULL COMMENT '股票代码',
`now_price` decimal(10,3) DEFAULT NULL COMMENT '今天价格',
`yes_price` decimal(10,3) DEFAULT NULL COMMENT '昨天价格',
`now_time` varchar(30) DEFAULT NULL COMMENT '更新时间',
`size` varchar(10) DEFAULT NULL COMMENT '涨跌幅',
`nover_num` int(11) DEFAULT NULL COMMENT '成交量',
`nover_price` varchar(255) DEFAULT NULL COMMENT '成交额',
`nover_rate` decimal(10,2) DEFAULT NULL COMMENT '换手率',
`TTM` decimal(10,2) DEFAULT NULL COMMENT '市盈率',
`market` decimal(10,2) DEFAULT NULL COMMENT '总市值',
`ratio` decimal(10,2) DEFAULT NULL COMMENT '市净率',
`pe_move` decimal(10,2) DEFAULT NULL COMMENT '市盈率(动)',
`pr_quiet` decimal(10,2) DEFAULT NULL COMMENT '市盈率(静)',
`update_time` varbinary(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
股票详情接口
CREATE TABLE `fa_shares_detail` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL COMMENT '股票名称',
`now_price` decimal(10,3) DEFAULT NULL COMMENT '今天价格',
`yes_price` decimal(10,3) DEFAULT NULL COMMENT '昨天价格',
`now_time` varchar(30) DEFAULT NULL COMMENT '更新时间',
`size` varchar(10) DEFAULT NULL COMMENT '涨跌幅',
`nover_num` int(11) DEFAULT NULL COMMENT '成交量',
`nover_price` varchar(255) DEFAULT NULL COMMENT '成交额',
`nover_rate` decimal(10,2) DEFAULT NULL COMMENT '换手率',
`TTM` decimal(10,2) DEFAULT NULL COMMENT '市盈率',
`market` decimal(10,2) DEFAULT NULL COMMENT '总市值',
`ratio` decimal(10,2) DEFAULT NULL COMMENT '市净率',
`pe_move` decimal(10,2) DEFAULT NULL COMMENT '市盈率(动)',
`pr_quiet` decimal(10,2) DEFAULT NULL COMMENT '市盈率(静)',
`update_time` varbinary(100) DEFAULT NULL,
`date` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=71 DEFAULT CHARSET=utf8;
# -*- coding: utf-8 -*-
import requests
import re
import datetime
import mysql.connector
import time
def array_to_insert_params(arr, table_name):
header = arr[0]
values = arr[1:]
field_str = ', '.join(header)
value_str_list = []
for value in values:
value_str_list.append('(' + ', '.join([f"'{v}'" for v in value]) + ')')
value_str = ', '.join(value_str_list)
return f"INSERT INTO {table_name} ({field_str}) VALUES {value_str};"
def array_to_update_params(arr, table_name, primary_keys):
header = arr[0]
values = arr[1:]
update_str_list = []
for value in values:
value_dict = dict(zip(header, value))
primary_key_values = [value_dict.pop(key) for key in primary_keys]
update_str = ', '.join([f"{k} = '{v}'" for k, v in value_dict.items()])
where_str = ' AND '.join([f"{key} = '{value}'" for key, value in zip(primary_keys, primary_key_values)])
update_str_list.append(f"{update_str} WHERE {where_str}")
return f"UPDATE {table_name} SET {', '.join(update_str_list)};"
def array_gj_to_update_params(arr, table_name, primary_keys, primary_key_rels=None):
header = arr[0]
values = arr[1:]
update_str_list = []
for value in values:
value_dict = dict(zip(header, value))
primary_key_values = [value_dict.pop(key) for key in primary_keys]
if primary_key_rels is None:
primary_key_rels = ['='] * len(primary_keys)
where_str = ' AND '.join([f"{key} {rel} '{value}'" for key, rel, value in zip(primary_keys, primary_key_rels, primary_key_values)])
update_str = ', '.join([f"{k} = '{v}'" for k, v in value_dict.items()])
update_str_list.append(f"{update_str} WHERE {where_str}")
return f"UPDATE {table_name} SET {', '.join(update_str_list)};"
mydb = mysql.connector.connect(
)
mycursor = mydb.cursor()
#x = datetime.datetime.now()
#date=x.strftime("%Y-%m-%d")
def getgp(stock_code):
url = 'https://qt.gtimg.cn/q='+stock_code
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
content = response.text
contents=content.split(';')
for n in contents:
if(len(n)>10):
pattern = r'v_\w{2,}="(.+?)"'
resultOne = re.findall(pattern, n)
data = resultOne[0].split('~')
date=data[30]
date = date[:8]
if len(data) > 0:
mycursor.execute("SELECT * FROM fa_shares where name='"+data[1]+"'")
myresult = mycursor.fetchone()
if(myresult):
size=str(round((float(data[3]) - float(data[4])) / float(data[4]) * 100, 2))+'%'
arr = [['now_price','yes_price','now_time','size','nover_num','nover_price','nover_rate','TTM','market','ratio','pe_move','pr_quiet','update_time','name'],
[data[3],data[4],data[30],size, data[36], data[37],data[38],data[39],data[45],data[46],data[52],data[53],int(time.time()),data[1]]
]
res=array_to_update_params(arr,"fa_shares",["name"])
mycursor.execute(res)
mycursor.execute("SELECT * FROM fa_shares_detail where name='"+data[1]+"' and date='"+date+"'")
myresult2 = mycursor.fetchone()
arr = [['now_price','yes_price','now_time','size','nover_num','nover_price','nover_rate','TTM','market','ratio','pe_move','pr_quiet','update_time','name','date'],
[data[3],data[4],data[30],size, data[36], data[37],data[38],data[39],data[45],data[46],data[52],data[53],int(time.time()),data[1],date]
]
if(myresult2):
res=array_to_update_params(arr,"fa_shares_detail",["name"])
mycursor.execute(res)
else:
res=array_to_insert_params(arr,"fa_shares_detail")
mycursor.execute(res)
mycursor.execute("SELECT * FROM fa_shares")
code = mycursor.fetchall()
c=""
for n in code:
c=n[2]+','+c
print(c)
getgp(stock_code=c)
更多推荐


所有评论(0)