在上一篇文章中分享到了如何去获取股票历史行情数据,接下来的文字我们讲讲如何将获取的数据进行保存;

1.梳理思路

在进行写代码之前我们先思考一下:1.数据以什么形式保存  2.如果有重复的数据怎么进行处理

3.如果想要爬多个股票的数据是否需要自动创建表格  4.如何大批量存数据到数据库中提升速度;

下面针对上述的4个问题进行代码分析:

2.数据保存

2.1数据一条条的插入到数据库

def save_to_mysql(name,data):try:# 打开数据库连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='*****', db='gupiao',charset='utf8')# 使用cursor方法创建一个游标cursor = conn.cursor()# # 执行sql语句query = f'INSERT IGNORE into {name}(riqi, start_price, end_price, highest, minimum, cheng_jiao_liang,cheng_jiao_e,zheng_fu,zhang_die_fu,zhang_die_e,huan_shou_lv,zhang_ting,die_ting) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'values = tuple(data)   #因为在上述文章中构造的数据是列表,所以这里需要将数据进行类型转换cursor.execute(query, values)# 提交之前的操作,如果之前已经执行多次的execute,那么就都进行提交conn.commit()except Exception as e:print(f'数据插入失败,提示为:',e)# 回滚conn.rollback()# 关闭cursor对象cursor.close()# 关闭数据库连接conn.close()

2.2数据集体插入

def save_many_to_mysql(name,new_list):try:# 打开数据库连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='gupiao',charset='utf8')# 使用cursor方法创建一个游标cursor = conn.cursor()# # 执行sql语句query = f'insert into {name}(riqi, start_price, end_price, highest, minimum, cheng_jiao_liang,cheng_jiao_e,zheng_fu,zhang_die_fu,zhang_die_e,huan_shou_lv,zhang_ting,die_ting) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'# values = tuple(data)cursor.executemany(query, new_list)# 提交之前的操作,如果之前已经执行多次的execute,那么就都进行提交conn.commit()except Exception as e:print(f'数据插入失败,提示为:',e)# 回滚conn.rollback()# 关闭cursor对象cursor.close()# 关闭数据库连接conn.close()

2.3创建数据表

功能:因为要给每个上市公司建立一张数据表来存储数据,所以要自动创建数据表

def create(table_name,sql_key):"""table:你需要创建的表sql_key:你想在表中创建的字段"""big_char_list = ["图片五", "图片四", "图片三", "图片二", "图片一", "用户反映"]db = pymysql.connect(host="127.0.0.1",port=3306,user='root',password='',db='gupiao',charset='utf8')# 连接数据库# 更改自己的密码和testdb,这个很重要,等下表单创建好了可以在Navicat for MySQL中查询。# 我这里的数据库名字是root,密码是liulinxs,你自己的不同得修改cursor = db.cursor()# db.commit()cursor.execute("DROP TABLE IF EXISTS {}".format(table_name))# 建表之前先删掉以前的表。str_sql=[]for sk in sql_key:if sk in big_char_list:str_sql.append(sk+"  varchar(255)")else:str_sql.append(sk+"  varchar(255)")sql_str=",\n".join(str_sql)#建表的sql语句,根据你自己的类型添加修改,# 不定长数据用varchar,# 比较确定长度的字段用char好一点,不要将char中的数字调太高# 记得,两处地方都要修改,否则数据存储会出现问题。#sql="CREATE TABLE usename"# sql="ALTER TABLE student ADD age INT(4)"sql = r"""CREATE TABLE {}({})ENGINE=InnoDB DEFAULT CHARSET=utf8""".format(table_name, sql_str)
# 出现1064之类的错误,注意列命名:"You have an error in your SQL syntax; check the manual that corresponds
# to your MySQL server version for the right syntax to use near 'like varchar(100))
# ENGINE=InnoDB DEFAULT CHARSET=utf8mb4' at line 6")
#这里是重中之重,一般这里指定为CHARSET=utf8mb3,但是,你要插入的数据中如含有表情符号等,会报1366错误,因此要指定为utf8mb4,这样才能将表情符号插入。cursor.execute(sql)cursor.close()db.commit()db.close()

2.4判断表格是否存在

功能:因为当有新的公司数据存入时,需要判断是否有这个表

def table_exists(table_name):        #这个函数用来判断表是否存在sql = "show tables;"# 打开数据库连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='自己的密码', db='gupiao',charset='utf8')# 使用cursor方法创建一个游标cursor = conn.cursor()cursor.execute(sql)tables = [cursor.fetchall()]table_list = re.findall('(\'.*?\')',str(tables))table_list = [re.sub("'",'',each) for each in table_list]if table_name in table_list:return 1        #存在返回1else:return 0        #不存在返回0

2.5 取出数据

功能:因为在后面进行可视化的时候我们需要将存入数据库的数据取出进行可视化

def fetch_daytoday_data(name,day1,day2):data = fetch_data(name)start = datetime.datetime.strptime(day1, "%Y-%m-%d")end = datetime.datetime.strptime(day2, "%Y-%m-%d")new_data=[]for i in data:now = datetime.datetime.strptime(i[0], "%Y-%m-%d")if start <= now <= end:new_data.append(i)return tuple(new_data)

到这里我们对数据库的操作就告一段落了;

3.数据进行可视化

本文使用flask框架+echats结合,通过从数据库拿取数据后,进行数据处理,然后通过Ajax将数据从后台传到前端;

echart操作可以参考官网示例:Examples - Apache ECharts

实现效果如下:

总结

该案例的整个思路如下:编写前端html,用flask将前后端进行连接起来,用户在前端输入上市公司,按下搜索按钮后将输入框的数据传给后端,后台接收到公司名称去excel里面寻找对应的股票代码,然后通过爬虫将该公司的数据爬取存到数据库中,再取出数据进行处理,通过Ajax传数据给前端进行显示。

源码连接:https://download.csdn.net/download/fengku1/86513315

觉得有用的朋友点点关注,后续分享更多有关python的案例知识

微信公众号同步更新

获取股票历史数据(2)——数据保存/数据可视化相关推荐

  1. Python获取股票历史数据和收盘数据的代码实现

    http://casey.blog.51cto.com/9994043/1707905 各种股票软件,例如通达信.同花顺.大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想 ...

  2. 获取股票历史数据和当前数据的API

    关键字:股票,stock,API,接口 1.获取股票当前数据 新浪数据接口:http://hq.sinajs.cn/list={code}.{code}替换为股票代码,沪市股票代码加前缀sh,深市股票 ...

  3. python 大智慧股票行情数据_Python获取股票历史数据和收盘数据的代码实现

    各种股票软件,例如通达信.同花顺.大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析.关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数 ...

  4. python量化分析系列之---使用python获取股票历史数据和实时分笔数据

    财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...

  5. 3 Python获取股票、基金、期货数据,好用的库efinance

    efinance 是由个人打造的用于获取股票.基金.期货数据的免费开源 Python 库,你可以使用它很方便地获取数据以便更好地服务于个人的交易系统需求. 范例 Stock 获取股票历史日 K 线数 ...

  6. tushare pro 版本获取股票历史数据

    最近研究程序化交易,需要使用股票历史数据.由于保存了所有股票历史数据,但是是截至到2018-12-28日,所以开始研究时对数据实时性要求不高,能实现功能即可. 经过近一个月的研究后, 即在 最基础表( ...

  7. python获取股票历史数据

    各种股票软件,例如通达信.同花顺.大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析.关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数 ...

  8. 获取股票历史数据(网易163行情接口)

    获取股票历史数据(网易163行情接口) 获取股票历史数据,通过网易163接口来获取数据,可以获取指数数据,也可以获取股票数据 import pandas as pd#沪市前面加0,深市前面加1,比如0 ...

  9. 基于macd、kdj、ma技术指标分析股票多空方向——应用开发2 获取股票历史数据

    这里选用tushare平台获取股票历史数据 所用包 tushare .pandas.datetime import tushare as ts import pandas as pd import d ...

最新文章

  1. 使用apidocJs快速生成在线文档
  2. 机器学习、深度学习、自然语言处理、计算机视觉顶级期刊的论文资料分享(附顶会论文下载链接)...
  3. 全球首个Magic Leap One体验:吓到你不敢进房间
  4. 转:android实时语音问题分析
  5. js生成[n,m]的随机数
  6. Arduino开发版学习计划
  7. java if语句选择题_选择语句(if else) 习题(2017/12/1)
  8. 腾讯开放TAPD、持续集成平台等核心研发工具,加速AI落地
  9. arraycopy方法的作用_System. arraycopy()入门指南
  10. Java Calendar使用指南
  11. [2018湖南省队集训] 6.28 T3 simulate
  12. C++:拷贝构造函数与深/浅拷贝
  13. SpringCloud工作笔记059---Jquery消息提示插件toastr使用详解
  14. 【图解线性代数】第二章——向量几何的基本意义【思维导图】
  15. 电脑声音有回音 怎么弄回去啊 5
  16. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——四大变换光照与材质
  17. Windows常见的几种权限维持
  18. 问题 M: 【枚举】桐桐数
  19. 为什么 128 KB 的魂斗罗可以塞下这么长的剧情?
  20. Python初学问题-input输入、while循环、函数

热门文章

  1. uni的numberbox怎么用_uni-app购物车功能
  2. Word2016文档完美地在表格里的方框(□)中打钩(√)
  3. 《码农翻身》之技术之路
  4. 捣鼓车间 | 学生获奖作品:戒烟帽
  5. 【报告分享】2022快手磁力金牛家居百货行业营销洞察报告-磁力引擎(附下载)
  6. 2021年软考时间阶段
  7. 怎样使用轻快pdf阅读器
  8. bzoj 4246: 两个人的星座 计算几何
  9. kali linux无线驱动安装,Kali Linux 安装WIFI无线网卡驱动:rtl8822bu 教程
  10. python的快捷键是什么意思_Python基础知识—快捷键