-- 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 = code    self.sd = start_data    self.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 = df    self.connect = connect    self.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 -= 1        i += 1    print(f"The data has been added to the stock database")    return i

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}[货币代码](https://www.gendan5.com/currencycode.html)股票数据")    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}支股票...")