Python 用Tushare接口获取股票数据并存储到Sqlite数据库

  1. 使用技术介绍:
    关于接口 由于tushare旧版本即将不能用了,所以我们这里使用的是tushare pro 接口。

    关于数据库 使用了Sqlite轻量级数据库适合本地使用。

    关于爬取的数据 共12种数据,如下ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount, avgprice

    关于py文件 共三个 分别是Tushare.py, config.py, SQLserver .py

  2. 具体实现

要import的库

import tushare as t1# t1 是旧版本后面的ts = t1.pro_api() 是变为pro版本
import time # 用以计时
from config import * # 此库为配置库
from SQLserver import * # 此库为作者所写
  1. Tushare Pro 爬取数据
    Pro接口需要前往官网(https://tushare.pro/)注册,并获取token,过程较为繁琐,而本文篇幅有限故将在之后更新获取token文章。
    将获取到的token值放进config文件中的tushare字典中。
# -*- coding: utf-8 -*-
"""此为存放配置信息的config.py"""
tushare = {"token":"", "column": ['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount'],} # 冒号里为您的token值
dbPath = r'\database.db' # 数据库路径
Stock_list={"平安银行": "000001.SZ","万科A": "000002.SZ","国华网安": "000004.SZ","世纪星源": "000005.SZ","深振业A": "000006.SZ","全新好": "000007.SZ"} # 股票名称和代码字典 有需要的我会在后续写如何获取名称和列表的文章

class Fetch_Data():"""code股票代码 sd开始日期 ed结束日期"""def __init__(self, code, start_data, end_data):self.code = codeself.sd = start_dataself.ed = end_data# self.csv_name = "csv_data/" + csv_name + ".csv"def web_spider(self):  # 爬虫tushare接口try:df = ts.daily(ts_code=self.code, start_date=self.sd, end_date=self.ed)  # 爬取数据--dataframe格式# daily方法所获取的数据ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,avgprice# df.to_csv(self.csv_name) # 转换为csv文件return df  # 返回数据except Exception as e:print(e) # 打印报错信息

当然仅有这段代码是不行的,我们还需要初始化tushare接口。初始化本写在main中,这里为了方便大家使用提到前面来说。

        t1.set_token(tushare["token"])  # 存在config里的token值ts = t1.pro_api()  # 初始化pro接口

2.存储到Sqlite数据库

# 存储到数据库
class Sql_Data_Handle():def __init__(self, df, connect, curs):self.df = dfself.connect = connectself.curs = cursdef character(self):# df = pandas.read_csv(self.csv_name, encoding='gbk') # 用pandas库读取csv文件line_num = self.line_num# pandas的iloc函数读取每行对应数据ts_code = self.df.iloc[line_num]["ts_code"]trade_date = self.df.iloc[line_num]["trade_date"]open = self.df.iloc[line_num]["open"]high = self.df.iloc[line_num]["high"]low = self.df.iloc[line_num]["low"]close = self.df.iloc[line_num]["close"]pre_close = self.df.iloc[line_num]["pre_close"]change = self.df.iloc[line_num]["change"]pct_chg = self.df.iloc[line_num]["pct_chg"]vol = self.df.iloc[line_num]["vol"]amount = self.df.iloc[line_num]["amount"]# 将数据转换为元祖tuple格式values = (ts_code, trade_date, float(open), float(high), float(low), float(close), float(pre_close),float(change), float(pct_chg), float(vol), float(amount))return valuesdef add_data(self):self.line_num = len(self.df) - 1# 循环调用character()函数-读取每行数据while self.line_num >= 0:value_list = self.character()try:# 插入数据库Sql.Sql_execution(f"""insert into stock ({tushare["Column"]}) values """ + f"(\'{value_list[0]}\',\'{value_list[1]}\',\'{value_list[2]}\',\'{value_list[3]}\',\'{value_list[4]}\',\'{value_list[5]}\',\'{value_list[6]}\',\'{value_list[7]}\',\'{value_list[8]}\',\'{value_list[9]}\',\'{value_list[10]}\')")except Exception:# 出错信息print(f"{value_list[0]}-{value_list[1]}未被添加!")self.line_num -= 1i += 1print(f"The data has been added to the stock database")return i

3.主函数
包括了连接数据库 初始化tushare Pro接口 调用Fetch_Data,Sql_Data_Handle类 计算添加用时和添加数据条数的功能。

if __name__ == '__main__':count = 0line_count = len(Stock_list)print("连接数据库")Sql = DataServer_Sqlite3("stock")  # 连接数据库stock_code = Stock_list# Sql.Empty_database()  # 清空数据库# print("清空数据库")# Sql.Zero_Id()  # 将ID归零# print("将ID归零")
for key in stock_code:try:column = tushare["column"] # config中的tushare字典t1.set_token(tushare["token"])  # token值ts = t1.pro_api()  # 初始化pro接口print("初始化pro接口成功")input_code = stock_code[key]sd, ed = "20181231", "20201231"  # 起始日期,结束日期print(f"抓取{key}股票数据")start = time.perf_counter()  # 开始时间df = Fetch_Data(input_code, sd, ed).web_spider()  # dataframe格式股票数据line_num = Sql_Data_Handle(df, Sql.connection, Sql.curs).add_data()end = time.perf_counter()  # 结束时间# 记录用时print(f"添加{key}股票数据到数据库--成功,用时{start - end}")# 记录添加的数据条数print(f"{key} 共{line_num}条数据已添加到数据库!")except Exception as e:print ecount += 1print(f"还剩{line_count - count}支股票...")

4.SQLserver作者用来处理sql语句所写的类。包括了连接数据库,执行sql语句,删除数据,拿取数据,清空数据库,归零id 功能。方便使用者使用。

# -*- coding: utf-8 -*-
"""此为处理sql语句的SQLserver.py"""
import sqlite3
import configclass DataServer_Sqlite3():def __init__(self, db_name):self.curs = ''self.connection = ''self.header = ''self.data = ''self.db_name = db_nameself.Connecting_database()def Connecting_database(self):self.connection = sqlite3.connect(config.dbPath)  # 连接数据库self.curs = self.connection.cursor()def Sql_execution(self, sql: str):self.curs = self.curs.execute(sql)self.connection.commit()def delete_data(self, key, data):self.curs = self.curs.execute(f"delete from " + key + " where trade_date=" + data)self.connection.commit()print("The data has been deleted")def Fetch_data(self):self.header = self.curs.descriptionself.data = self.curs.fetchall()def Empty_database(self, db_name: str):self.curs = self.curs.execute(f"DELETE FROM \"{db_name}\"")self.connection.commit()def Zero_Id(self):self.curs = self.curs.execute(f"update sqlite_sequence set seq=0 where name='{self.db_name}'")self.connection.commit()def Create_table(self, name: str, input_header: str):"""sample: input_header =int primary key,ts_code,symbol,name,area,industry,market,list_date"""self.Sql_execution(f"create table {name}({input_header})")

用Tushare接口爬取完整代码

# -*- coding: utf-8 -*-"""此处为用于爬取和存储到数据库的Tushare.py"""
import tushare as t1
import time # 用以计时
from config import * # 此库为配置库
from SQLserver import * # 此库为作者所写class Fetch_Data():"""code股票代码 sd开始日期 ed结束日期"""def __init__(self, code, start_data, end_data):self.code = codeself.sd = start_dataself.ed = end_data# self.csv_name = "csv_data/" + csv_name + ".csv"def web_spider(self):  # 爬虫tushare接口try:df = ts.daily(ts_code=self.code, start_date=self.sd, end_date=self.ed)  # 爬取数据--dataframe格式# daily方法所获取的数据ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,avgprice# df.to_csv(self.csv_name) # 转换为csv文件return df  # 返回数据except Exception as e:print(e) # 打印报错信息
class Sql_Data_Handle():def __init__(self, df, connect, curs):self.df = dfself.connect = connectself.curs = cursdef character(self):# df = pandas.read_csv(self.csv_name, encoding='gbk') # 用pandas库读取csv文件line_num = self.line_num# pandas的iloc函数读取每行对应数据ts_code = self.df.iloc[line_num]["ts_code"]trade_date = self.df.iloc[line_num]["trade_date"]open = self.df.iloc[line_num]["open"]high = self.df.iloc[line_num]["high"]low = self.df.iloc[line_num]["low"]close = self.df.iloc[line_num]["close"]pre_close = self.df.iloc[line_num]["pre_close"]change = self.df.iloc[line_num]["change"]pct_chg = self.df.iloc[line_num]["pct_chg"]vol = self.df.iloc[line_num]["vol"]amount = self.df.iloc[line_num]["amount"]# 将数据转换为元祖tuple格式values = (ts_code, trade_date, float(open), float(high), float(low), float(close), float(pre_close),float(change), float(pct_chg), float(vol), float(amount))return valuesdef add_data(self):self.line_num = len(self.df) - 1# 循环调用character()函数-读取每行数据while self.line_num >= 0:value_list = self.character()try:# 插入数据库Sql.Sql_execution(f"""insert into stock ({tushare["Column"]}) values """ + f"(\'{value_list[0]}\',\'{value_list[1]}\',\'{value_list[2]}\',\'{value_list[3]}\',\'{value_list[4]}\',\'{value_list[5]}\',\'{value_list[6]}\',\'{value_list[7]}\',\'{value_list[8]}\',\'{value_list[9]}\',\'{value_list[10]}\')")except Exception:# 出错信息print(f"{value_list[0]}-{value_list[1]}未被添加!")self.line_num -= 1i += 1print(f"The data has been added to the stock database")return iif __name__ == '__main__':count = 0line_count = len(Stock_list)print("连接数据库")Sql = DataServer_Sqlite3("stock")  # 连接数据库stock_code = Stock_list# Sql.Empty_database()  # 清空数据库# print("清空数据库")# Sql.Zero_Id()  # 将ID归零# print("将ID归零")
for key in stock_code:try:column = tushare["column"] # config中的tushare字典t1.set_token(tushare["token"])  # token值ts = t1.pro_api()  # 初始化pro接口print("初始化pro接口成功")input_code = stock_code[key]sd, ed = "20181231", "20201231"  # 起始日期,结束日期print(f"抓取{key}股票数据")start = time.perf_counter()  # 开始时间df = Fetch_Data(input_code, sd, ed).web_spider()  # dataframe格式股票数据line_num = Sql_Data_Handle(df, Sql.connection, Sql.curs).add_data()end = time.perf_counter()  # 结束时间# 记录用时print(f"添加{key}股票数据到数据库--成功,用时{start - end}")# 记录添加的数据条数print(f"{key} 共{line_num}条数据已添加到数据库!")except Exception as e:print ecount += 1print(f"还剩{line_count - count}支股票...")

有需要股票代码和名称的私信我。

有问题可以在评论区留言。如果喜欢这篇文章记得点赞哦!!!

python爬取股票数据并存到数据库相关推荐

  1. Python爬取股票数据存入mysql数据库,获取股票(最新、最高、今开、成交量、成交额、量比、换手率、涨幅等)支持多线程+数据库连接池

    项目简介 (Python)爬虫 + MySQL + Redis项目. 爬取下来的数据可用于后续的数据分析(我计划将其用于我的毕业设计). 未来会将数据分析的可视化部署到服务器上, 并添加股票降价通知的 ...

  2. python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件

    python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件 import requests import pandas as pd# market: 0:沪市 1:深市 # ...

  3. Python爬虫教程-Python爬取股票数据过程详解

    这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycha ...

  4. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  5. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)(转载)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  6. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,在其中用股票范例讲述Python爬虫.数据分析和机器学习的技术,大家看了我的书,不仅能很快用比较热门的案例学好P ...

  7. 【python爬虫】用python爬取股票数据

    这几天把学习通的 python 爬虫相关课程给刷完了,想去动手也实践一下,重温一下很久之前学过的东西 然后发现实例2(爬淘宝那个).实例3(爬股票那个),好像都有点问题.实例2是淘宝现在的反爬机制好像 ...

  8. 用python爬取股票数据的一点小结

    一.背景 网上对于爬取股票数据有相对完善的教程.不过大部分教程都是只能够爬取一段时间的股票数据,针对某一只股票的历史数据爬取,目前还没有看到比较好的教程.下面对近期学的东西进行一点点小结. 二.股票数 ...

  9. python爬取证券数据并存入数据库

    用python爬虫爬取数据并存到数据库 1----------------------------------------------------------------------编写爬虫,下载数据 ...

最新文章

  1. miui 8 android对应关系,小米回应MIUI版本和安卓版本没有对应关系 你怎么看
  2. 《DSP using MATLAB》Problem 6.24
  3. The Famous Clock(著名的钟)
  4. VMware虚拟化/云计算
  5. 微信小程序,格式化千分位并保留两位小数
  6. 在JAVA中把JSON数据格式化输出到控制台
  7. nagios的实时监控
  8. EB开发乱码处理总结
  9. 记一次勒索病毒下的Oracle数据恢复
  10. Spark的下一代引擎-Project Tungsten启示录
  11. 小学计算机设备报表,小学信息技术教育及电教设备自查报告
  12. 编写lisp程序解一元二次方程_vb解一元二次方程代码
  13. 【JDK下载与安装教程】
  14. HDD硬盘初始化后,选择MBR还是GPT?
  15. 给未来的你-李开复在2011级大学新生学习规划讲座上的演讲
  16. Centos7配置环境变量导致大部分命令不可用
  17. 可视化大屏设计尺寸_Vue 大屏可视化-屏幕自适应(保持设计尺寸比例)
  18. word在合并单元格后不能输入文字
  19. 第三次作业—唐洁、陈小丽
  20. 图片加水印后下载(满屏水印,单个水印,可自定义角度)

热门文章

  1. php中dump怎么使用,php中var_dump()方法的用法简介
  2. java后台接收json数据
  3. python 闭包理解与应用
  4. matlab循环选择语句怎么写,如何使用matlab循环语句
  5. python+openCV一键换底色,不同底色自动判断
  6. jzoj P1595 过路费
  7. mysql 1129 错误Host is blocked because of many connection errors; unblock with 'mysqladmin flush-host
  8. 【ACDU】国产数据库有奖征文活动开始啦!发原创奖京东卡,最高可领1000元!
  9. Linux 网卡重命名
  10. 读取文件错误 OSError: [Errno 22] Invalid argument: