一份完美的封装成函数的爬取并存储国内疫情概况的代码

dev_kfq
Chinaholmesfans 5 years ago
parent 1dab372b20
commit 423815b295

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