import json import requests import pymysql ####################################################################################################################### #爬取国内疫情数据概况 def InsideSummary(): class class_InsideSummary: def __init__(self): self.curConfirm = 0 # 现有确诊 self.curConfirmRelative = 0 # 较昨日新增确诊 self.asymptomatic = 0 # 无症状感染 self.asymptomaticRelative = 0 # 较昨日新增无症状感染 self.unconfirmed = 0 # 现有疑似 self.unconfirmedRelative = 0 # 较昨日疑似新增 self.icu = 0 # 现有重症 self.icuRelative = 0 # 较昨日重症病例新增 self.confirmed = 0 # 累计确诊 self.confirmedRelative = 0 # 较昨日累计确诊新增 self.overseasInput = 0 # 累计境外输入 self.overseasInputRelative = 0 # 较昨日累计境外输入新 增 self.cured = 0 # 累计治愈 self.curedRelative = 0 # 较昨日累计治愈新增 self.died = 0 # 累计死亡 self.diedRelative = 0 # 较昨日累计死亡新增 self.updatedTime = 0 # 发布时间 # 返回元组 def get_inside_summary_tuple(self): return ((self.curConfirm, self.curConfirmRelative, self.asymptomatic, self.asymptomaticRelative, \ self.unconfirmed, self.unconfirmedRelative, self.icu, self.icuRelative, self.confirmed, \ self.confirmedRelative, self.overseasInput, self.overseasInputRelative, self.cured, self.curedRelative, \ self.died, self.diedRelative, self.updatedTime)) # 输出接口 def __str__(self): return '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s' % ( self.curConfirm, self.curConfirmRelative, self.asymptomatic, self.asymptomaticRelative, self.unconfirmed, self.unconfirmedRelative, self.icu, self.icuRelative, self.confirmed, self.confirmedRelative, self.overseasInput, self.overseasInputRelative, self.cured, self.curedRelative, self.died, self.diedRelative, self.updatedTime) def get_text():# 爬取国内疫情数据文本 res = requests.get('https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5') res = res.content.decode('utf-8') dict = json.loads(res) # str->dict # 规范数据 for key in dict: try: dict[key] = dict[key].replace('\\', '') key = key.replace('\\', '') except: pass data = json.loads(dict['data']) return data # 国内疫情数据赋值 def fetch_inside_summary(): dataf=get_text() insideSummary = class_InsideSummary() insideSummary.curConfirm = int(dataf['chinaTotal']['nowConfirm']) insideSummary.curConfirmRelative = int(dataf['chinaAdd']['nowConfirm']) insideSummary.asymptomatic = int(dataf['chinaTotal']['noInfect']) insideSummary.asymptomaticRelative = int(dataf['chinaAdd']['noInfect']) insideSummary.unconfirmed = int(dataf['chinaTotal']['suspect']) insideSummary.unconfirmedRelative = int(dataf['chinaAdd']['suspect']) insideSummary.icu = int(dataf['chinaTotal']['nowSevere']) insideSummary.icuRelative = int(dataf['chinaAdd']['nowSevere']) insideSummary.confirmed = int(dataf['chinaTotal']['confirm']) insideSummary.updatedTime = dataf['lastUpdateTime'] insideSummary.confirmedRelative = int(dataf['chinaAdd']['confirm']) insideSummary.overseasInput = int(dataf['chinaTotal']['importedCase']) insideSummary.overseasInputRelative = int(dataf['chinaAdd']['importedCase']) insideSummary.cured = int(dataf['chinaTotal']['heal']) insideSummary.curedRelative = int(dataf['chinaAdd']['heal']) insideSummary.died = int(dataf['chinaTotal']['dead']) insideSummary.diedRelative = int(dataf['chinaAdd']['dead']) return insideSummary # 保存国内疫情概况数据 def insert(res): # 创建连接,并且返回连接对象 conn = pymysql.connect(host='localhost', user='root', db='covid19', passwd='kfq991122') # 创建游标对象 cursor = conn.cursor() date = data['lastUpdateTime'] sql = 'delete from home_realtime_datas where updatedTime like "%s"' % (date + '%') print('delete old_insidesummary_datas successful') try: cursor.execute(sql) conn.commit() except Exception as e: print(e) sql = 'insert into home_realtime_datas(curConfirm,curConfirmRelative,asymptomatic,asymptomaticRelative,unconfirmed,unconfirmedRelative,icu,icuRelative,confirmed,confirmedRelative,overseasInput,overseasInputRelative,cured,curedRelative,died,diedRelative,updatedTime) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' try: cursor.execute(sql, res) conn.commit() print("+++ save_insidesummary_datas successful") print('+++ save_outsideSummary_datas, data len: %d' % len(res)) except Exception as e: print(e) print('+++ save_insidesummary_datas fail.') print('+++ save_insidesummary_datas is over.') cursor.close() conn.close() ########InsideSummary__main__#################### data = get_text() insert(fetch_inside_summary().get_inside_summary_tuple()) InsideSummary()