设置一个定时取数任务----每日从Tusahre平台取数入库

继完成从网页接口取数任务后,想要让程序每日自动帮我执行回收数据,于是设置了一个定时任务
1、导包

import schedule
import time
from datetime import datetime
import tushare as ts
import pandas as pd
import pymysql
ts.set_token('****************************')
pro = ts.pro_api()

2、连接数据库,建个表

####连接数据库,如history已存在就删掉
db = pymysql.connect(host="localhost", user="root",password="123456, database="data", charset='utf8' )
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS history")

# 创建数据表SQL语句
sql = """CREATE TABLE history (
         ts_code  varchar(32) ,
         trade_date varchar(32),
         turnover_rate float,  
         volume_ratio float,
         pe float ,
         pb  float )   """
cursor.execute(sql)
db.close() # 关闭数据库连接
print('successful')

3、定义取数函数和定时任务函数

def qushu(trade_date):
    for trade_date in trade_date:
        b=pro.query('daily_basic', ts_code='', trade_date=trade_date,fields='ts_code,trade_date,turnover_rate,volume_ratio,pe,pb').fillna(0)
        result=b.to_dict('index')   ####将dataframe转换为字典,每支股一天的信息存为一个字典值,其键为索引
        i=len(result.keys()) ###计算result中有多少个键
        db= pymysql.connect(host="localhost", user="root",password="123456, database="data", charset='utf8' )    # 打开数据库连接
        cursor = db.cursor()         # 使用cursor()方法获取操作游标 
        table='history'  #mysql数据库里建的表
        for i in range(i):
            data=result[i]  ####循环取每个键对应的值
            keys = ', '.join(data.keys())
            values =tuple(data.values())
            sql = "INSERT INTO history(ts_code,trade_date,turnover_rate,volume_ratio,pe,pb) VALUES (%s, %s,  %s,  %s,  %s,  %s)"
            try:
                if cursor.execute(sql,values):
                    print('+1')
                    db.commit()
            except:
                print('failed')
                db.rollback()
        db.close

def crawl_daily():
    """
    每日的定时抓取
    """
    now_date = datetime.now()
    # 获取今天星期几,周日-周六:0-6
    weekday = int(now_date.strftime('%w'))
    # 只有周一到周五执行
    if 0 < weekday < 6:
        # 当前日期
        trade_date = now_date.strftime('%Y-%m-%d').replace('-','')
        # 取当日数据
        qushu([trade_date])

4、主函数执行
任务没10s监测一次,任务一直不会停,到工作日每日的17:30开始从网页上取数插入数据库中

# 定时任务的启动入口
if __name__ == '__main__':
    # 设定每天下午15:30执行抓取任务
    schedule.every().day.at("17:30").do(crawl_daily)
    # 通过无限循环,执行任务检测
    while True:
        # 每10秒检测一次
        schedule.run_pending()
        time.sleep(10)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值