大家好,又见面了,我是你们的朋友全栈君。
作为一个技术男,一开始总想着怎么去爬数据。然而一旦发现有免费的数据接口时,瞬间感觉爬来的不香了。。。
利用Tushare大数据社区的数据接口:
1、注册用户,并完善资料,以获取最低的积分要求;
2、获取token,作为获取数据的唯一凭证;
3、利用python脚本采集入库。
能力要求:
1、会使用mysql数据库
2、熟悉python基础语法
一、注册用户
(1)注册的操作很简单,参考平台的说明,注册完成后可获得100积分,链接如下:
https://tushare.pro/document/1?doc_id=38
(2)点击右上角的“个人主页”,然后点“个人资料”标签页,完善基本资料后可获得20积分。这样就能满足最低120积分要求。
(具体图示略)
二、获取token
在采集数据前,需要提供token进行身份认证,获取方法也很简单,参考平台说明:
https://tushare.pro/document/1?doc_id=39
三、获取数据并入库
接下来主要就是一套python代码的事了,下面以采集最近一年内日线数据为例做详细说明。
(1)连接自己的mysql库,创建目标表stock
CREATE TABLE `stock` (
`ts_code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '股票代码',
`trade_date` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '交易日期',
`pri_open` decimal(18, 2) NULL DEFAULT NULL COMMENT '开盘价',
`pri_high` decimal(18, 2) NULL DEFAULT NULL COMMENT '最高价',
`pri_low` decimal(18, 2) NULL DEFAULT NULL COMMENT '最低价',
`pri_close` decimal(18, 2) NULL DEFAULT NULL COMMENT '收盘价',
`pri_close_pre` decimal(18, 2) NULL DEFAULT NULL COMMENT '昨收价',
`am_chg` decimal(18, 2) NULL DEFAULT NULL COMMENT '涨跌额',
`pct_chg` decimal(18, 2) NULL DEFAULT NULL COMMENT '涨跌幅(未复权)',
`vol` int NULL DEFAULT NULL COMMENT '成交量(手)',
`amount` decimal(18, 2) NULL DEFAULT NULL COMMENT '成交额(千元)',
INDEX `idx_sdl_code`(`ts_code`) USING BTREE,
INDEX `idx_sdl_date`(`trade_date`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
(2)“python脚本上半部分”,导入包,提供token和mysql数据信息,注意第9行中,数据库的用户名、密码、ip、端口号、和数据库名要填全
import pymysql
import datetime
import tushare as ts
import pandas as pd
from sqlalchemy import create_engine
# 连接 tushare,获取行情数据
pro = ts.pro_api('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
engine = create_engine("mysql+pymysql://root:mima@192.168.99.99:3306/db2?charset=utf8")
# 打开数据库连接
db = pymysql.connect(host='192.168.99.99', port=3306, user='root', passwd='feng', db='db2', charset='utf8')
(3)“python脚本下半部分”,编写循环,每循环一次获取一天的数据,如果当天不是交易日则获取的数据为空。其中调用接口部分只有19和20两行代码。
# 获取当前日期
now = datetime.datetime.now()
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 循环365次,每次生成当前日期,作为入参获取当天数据
for i in range(1,366):
delta = datetime.timedelta(days=i)
n_days = now - delta
rq = n_days.strftime('%Y%m%d')
# 清空临时表
sql1 = "truncate table stock_daily_basic"
cursor.execute(sql1)
# (Tushare数据接口)获取数据,然后插入到数据库临时表stock_daily_basic
df = pro.daily(trade_date=rq)
df.to_sql(name='stock_daily_basic',con=engine,if_exists='append',index=False)
# 从临时表插入到目标表
sql2 = "insert into stock select * from stock_daily_basic"
cursor.execute(sql2)
db.commit()
# 关闭数据库连接
db.close()
(4)连接mysql库,查看获取的数据
四、补充说明
以上只是按我个人习惯列举的简单例子,Tushare平台足够丰富,基本能支持大家的各种数据需求。
平台特点:
- 拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据
- SDK开发包支持语言,同时提供HTTP Restful接口,最大程度方便不同人群的使用
- 提供多种数据储存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,为数据获取提供了性能保证
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152725.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...