继完成从网页接口取数任务后,想要让程序每日自动帮我执行回收数据,于是设置了一个定时任务
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)