@ -1,5 +1,4 @@
import time
import datetime
import requests
from bs4 import BeautifulSoup
import re
@ -187,17 +186,7 @@ def Inside(ds):
html = self . fetch_html_page ( )
self . parse_html_page ( html )
all_province , all_city = self . fetch_province_datas ( )
# print(len(all_province))
# for item in all_province:
# # print(item.get_info_tuple())
# for i in item.cities:
# print(i.get_info_tuple())
# print("++++++++++++++++++++++++++++++++++++++++++++++"*4)
# for i in all_city:
# print(i.get_info_tuple())
# print("++++++++++++++++++++++++++++++++++++++++++++++"*4)
# print(len(all_city))
# # 保存省份数据
self . db . save_province_datas ( all_province )
# 保存城市数据
@ -353,10 +342,10 @@ def OutsideSummary(dsin):
def save_outsideSummary_datas ( self , outsideSummary ) :
date = datetime . datetime . now ( ) . strftime ( ' % Y- % m- %d ' )
print ( ' +++ [MyDB] delete from outsideSummary_realtime_datas ' )
self . cursor . execute ( ' delete from outside S ummary_realtime_datas where updatedTime like " %s " ' % ( date + ' % ' ) )
self . cursor . execute ( ' delete from outside s ummary_realtime_datas where updatedTime like " %s " ' % ( date + ' % ' ) )
self . conn . commit ( )
sql = ' insert into outside S ummary_realtime_datas(currentConfirmedCount,confirmedCount,suspectedCount,curedCount,deadCount,suspectedIncr,currentConfirmedIncr,confirmedIncr,curedIncr,deadIncr,updatedTime) values(%s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s ) '
sql = ' insert into outside s ummary_realtime_datas(currentConfirmedCount,confirmedCount,suspectedCount,curedCount,deadCount,suspectedIncr,currentConfirmedIncr,confirmedIncr,curedIncr,deadIncr,updatedTime) values(%s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s ) '
res = self . get_outsideSummary_list_tuple ( outsideSummary )
print ( ' +++ save_outsideSummary_datas, data len: %d ' % len ( res ) )
try :
@ -405,7 +394,7 @@ def OutsideSummary(dsin):
result = re . findall ( ' \ { " currentConfirmedCount " .*? " deadIncr " .*? \ } ' , tagstr )
# 获取国外疫情数据
#print(result[0] )
print ( tagstr )
obj = json . loads ( result [ 0 ] )
@ -434,124 +423,129 @@ def OutsideSummary(dsin):
ds . db . save_outsideSummary_datas ( outsideSummary )
def InsideSummary ( ds ) :
class 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 #发布时间
# 数据库接口
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 . 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 )
#######################################################################################################
#业务逻辑类
# 爬取国内疫情数据
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字典
data = json . loads ( dict [ ' 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 ' ] )
insideSummary . unconfirmed = int ( data [ ' chinaTotal ' ] [ ' suspect ' ] )
insideSummary . unconfirmedRelative = int ( data [ ' chinaAdd ' ] [ ' suspect ' ] )
insideSummary . icu = int ( data [ ' chinaTotal ' ] [ ' nowSevere ' ] )
insideSummary . icuRelative = int ( data [ ' chinaAdd ' ] [ ' nowSevere ' ] )
insideSummary . confirmed = int ( data [ ' chinaTotal ' ] [ ' confirm ' ] )
insideSummary . updatedTime = data [ ' lastUpdateTime ' ]
insideSummary . confirmedRelative = int ( data [ ' chinaAdd ' ] [ ' confirm ' ] )
insideSummary . overseasInput = int ( data [ ' chinaTotal ' ] [ ' importedCase ' ] )
insideSummary . overseasInputRelative = int ( data [ ' chinaAdd ' ] [ ' importedCase ' ] )
insideSummary . cured = int ( data [ ' chinaTotal ' ] [ ' heal ' ] )
insideSummary . curedRelative = int ( data [ ' chinaAdd ' ] [ ' heal ' ] )
insideSummary . died = int ( data [ ' chinaTotal ' ] [ ' dead ' ] )
insideSummary . diedRelative = int ( data [ ' chinaAdd ' ] [ ' dead ' ] )
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 , ds ) :
# 创建连接,并且返回连接对象)
conn = pymysql . connect ( host = ds [ 0 ] , user = ds [ 1 ] , passwd = ds [ 2 ] , db = ds [ 3 ] )
# 保存国内疫情概况数据
def insert ( res ) :
# 创建连接,并且返回连接对象
conn = pymysql . connect ( host = ' localhost ' , user = ' root ' , db = ' covid19 ' , passwd = ' kfq991122 ' )
# 创建游标对象
cursor = conn . cursor ( )
date = data [ ' lastUpdateTime ' ] . split ( ' ' , 1 ) [ 0 ]
print ( date )
sql = ' delete from home_realtime_datas where updatedTime like " %s " ' % ( date + ' % ' )
print ( ' The update was successful ' )
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 ) '
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_province_datas is over. ' )
print ( ' +++ save_insidesummary_datas fail. ' )
print ( ' +++ save_insidesummary_datas is over. ' )
cursor . close ( )
conn . close ( )
insert ( fetch_inside_summary ( data ) . get_inside_summary_tuple ( ) , ds )
conn = pymysql . connect ( host = ds [ 0 ] , user = ds [ 1 ] , passwd = ds [ 2 ] , db = ds [ 3 ] )
cursor = conn . cursor ( )
sql = ' select * from home_realtime_datas '
cursor . execute ( sql )
results = cursor . fetchall ( )
print ( results )
########InsideSummary__main__####################
data = get_text ( )
insert ( fetch_inside_summary ( ) . get_inside_summary_tuple ( ) )
ds = [ ' localhost ' , ' root ' , ' 20Z00t10x 28_my ' , ' covid19 ' ]
ds = [ ' localhost ' , ' root ' , ' kfq991122 ' , ' covid19 ' ]
while ( True ) :
Inside ( ds )
InsideSummary ( ds )
Outside ( ds )
OutsideSummary ( ds )
InsideSummary ( ds )
time . sleep ( 3600 )