You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
8.6 KiB
218 lines
8.6 KiB
import requests
|
|
import re
|
|
from bs4 import BeautifulSoup
|
|
import json
|
|
import time
|
|
import pymysql
|
|
|
|
class City:
|
|
def __init__(self,tempjs={},time='',area='',city='无数据',confirmed=0,died=0,crued=0,confirmedRelative=0,cityCode=0):
|
|
self.province=area
|
|
self.relativeTime=time
|
|
self.city=city
|
|
self.confirmed=confirmed
|
|
self.died=died
|
|
self.crued=crued
|
|
self.confirmedRelative=confirmedRelative
|
|
self.cityCode=cityCode
|
|
js={'city': '无数据', 'confirmed': 0, 'died': 0, 'crued': 0, 'confirmedRelative': 0, 'cityCode': 0}
|
|
for k,v in tempjs.items():
|
|
if tempjs[k]!='':
|
|
js[k]=v
|
|
self.city=str(js["city"])
|
|
self.confirmed=int(js["confirmed"])
|
|
self.died=int(js["died"])
|
|
self.crued=int(js["crued"])
|
|
self.confirmedRelative=int(js["confirmedRelative"])
|
|
self.cityCode=int(js["cityCode"])
|
|
def get_db_tuple(self):
|
|
return (self.province,self.city,self.confirmed,self.died,self.crued,self.confirmedRelative,self.relativeTime,self.cityCode)
|
|
|
|
def insert_sql(self,con):
|
|
sql="""insert into insideCity
|
|
(province,city,confirmed,died,crued,confirmedRelative,relativeTime,cityCode)
|
|
values(%s,%s,%s,%s,%s,%s,%s,%s)
|
|
"""
|
|
try:
|
|
con.cursor().execute(sql,self.get_db_tuple())
|
|
con.commit()
|
|
except Exception as e:
|
|
print(e)
|
|
print('Insert insideCity failed.')
|
|
else:
|
|
print('Inserted insideCity successfully')
|
|
|
|
def __str__(self):
|
|
if self.city=='境外输入':
|
|
return "其它情况:{:<10}城市代码:{:<4}新增患者:{:<4}累积确诊:{:<4}累积死亡:{:<4}累积治愈:{:<4}".format(self.city,self.cityCode,self.confirmedRelative,
|
|
self.confirmed,self.died,self.crued)
|
|
return "城市名:{:<10}城市代码:{:<4}新增患者:{:<4}累积确诊:{:<4}累积死亡:{:<4}累积治愈:{:<4}".format(self.city,self.cityCode,self.confirmedRelative,
|
|
self.confirmed,self.died,self.crued)
|
|
|
|
class Provinces:
|
|
def __init__(self):
|
|
self.number=0
|
|
self.province=[]
|
|
def addProvince(self,province):
|
|
self.province.append(province)
|
|
def printEveryProvince(self):
|
|
for p in self.province:
|
|
print(p)
|
|
def __str__(self):
|
|
return str(self.province)
|
|
|
|
|
|
class Province:
|
|
def __init__(self,tempjs={},confirmed=0,died=0,crued=0,relativeTime=0,confirmedRelative=0,
|
|
diedRelative=0,curedRelative=0,asymptomaticRelative=0,asymptomatic=0,
|
|
curConfirm=0,curConfirmRelative=0,icuDisable=0,area='',subList=[]):
|
|
self.died=died
|
|
self.confirmed=confirmed
|
|
self.crued=crued
|
|
self.relativeTime=relativeTime
|
|
self.confirmedRelative=confirmedRelative
|
|
self.diedRelative=diedRelative
|
|
self.curedRelative=curedRelative
|
|
self.asymptomaticRelative=asymptomaticRelative
|
|
self.asymptomatic=asymptomatic
|
|
self.curConfirm=curConfirm
|
|
self.curConfirmRelative=curConfirmRelative
|
|
self.icuDisable=icuDisable
|
|
self.area=area
|
|
self.subList=subList
|
|
js={'confirmed': 0, 'died': 0, 'crued': 0, 'relativeTime': 0, 'confirmedRelative': 0,
|
|
'diedRelative': 0, 'curedRelative': 0, 'asymptomaticRelative': 0, 'asymptomatic': 0, 'curConfirm': 0,
|
|
'curConfirmRelative': 0, 'icuDisable': 0, 'area': '', 'subList':[]}
|
|
for k,v in tempjs.items():
|
|
if tempjs[k]!='':
|
|
js[k]=v
|
|
#print(js)
|
|
self.died=js['died']
|
|
self.confirmed=js['confirmed']
|
|
self.crued=js['crued']
|
|
self.relativeTime=js['relativeTime']
|
|
self.confirmedRelative=js['confirmedRelative']
|
|
self.diedRelative=js['diedRelative']
|
|
self.curedRelative=js['curedRelative']
|
|
self.asymptomaticRelative=js['asymptomaticRelative']
|
|
self.asymptomatic=js['asymptomatic']
|
|
self.curConfirm=js['curConfirm']
|
|
self.curConfirmRelative=js['curConfirmRelative']
|
|
self.icuDisable=js['icuDisable']
|
|
self.area=js['area']
|
|
self.subList=js['subList']
|
|
cities=js["subList"]
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
newtime=time.strftime("%Y-%m-%d %H:%M:%S",localobj)
|
|
for c in cities:
|
|
city=City(c,time=newtime,area=self.area)
|
|
subList.append(city)
|
|
|
|
def get_db_tuple(self):
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
newtime=time.strftime("%Y-%m-%d %H:%M:%S",localobj)
|
|
return (self.died,self.confirmed,self.crued,newtime,self.confirmedRelative,self.diedRelative,self.curedRelative,self.asymptomaticRelative,self.asymptomatic,self.curConfirm,self.curConfirmRelative,self.icuDisable,self.area)
|
|
|
|
def deleteProvince_sql(self,con):
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
cal=time.strftime("%Y-%m-%d %H:%M:%S",localobj)[0:10]+r"%"
|
|
sql="""
|
|
delete from insideProvince
|
|
where area='%s' and relativeTime like '%s'
|
|
"""%(self.area,cal)
|
|
try:
|
|
cursor=con.cursor()
|
|
cursor.execute(sql)
|
|
except Exception as e:
|
|
print(e)
|
|
print('delete deleteProvince failed.')
|
|
else:
|
|
print('delete deleteProvince successfully')
|
|
|
|
def deleteCity_sql(self,con):
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
cal=time.strftime("%Y-%m-%d %H:%M:%S",localobj)[0:10]+r"%"
|
|
sql="""
|
|
delete from insideCity
|
|
where province='%s' and relativeTime like '%s'
|
|
"""%(self.area,cal)
|
|
try:
|
|
cursor=con.cursor()
|
|
cursor.execute(sql)
|
|
except Exception as e:
|
|
print(e)
|
|
print("delete %s'City failed."%self.area)
|
|
else:
|
|
print("delete %s'City successfully"%self.area)
|
|
|
|
def insert_sql(self,con):
|
|
sql="""insert into insideProvince
|
|
(died,confirmed,crued,relativeTime,confirmedRelative,
|
|
diedRelative,curedRelative,asymptomaticRelative,
|
|
asymptomatic,curConfirm,curConfirmRelative,icuDisable,area)
|
|
values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
|
|
"""
|
|
try:
|
|
self.deleteProvince_sql(con)
|
|
con.cursor().execute(sql,self.get_db_tuple())
|
|
con.commit()
|
|
except Exception as e:
|
|
print(e)
|
|
print('Insert insideProvince failed.')
|
|
else:
|
|
print('Inserted insideProvince successfully')
|
|
self.deleteCity_sql(con)
|
|
for c in self.subList:
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
newtime=time.strftime("%Y-%m-%d %H:%M:%S",localobj)
|
|
city=City(c,newtime,self.area)
|
|
city.insert_sql(con)
|
|
|
|
|
|
def printEveryCity(self):
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
newtime=time.strftime("%Y-%m-%d %H:%M:%S",localobj)
|
|
for c in self.subList:
|
|
city=City(c,time=newtime,area=self.area)
|
|
print(city)
|
|
|
|
def __str__(self):
|
|
localobj=time.localtime(int(self.relativeTime))
|
|
newtime=time.strftime("%Y-%m-%d %H:%M:%S",localobj)
|
|
return "省份:{:<4}现有患者:{:<4}现有新增患者:{:<4}累积无症状感染者:{:<4}新增无症状感染者:{:<4}累积确诊:{:<6}新增确诊:{:<4}累积治愈:{:<6}新增治愈:{:<4}累积死亡:{:<6}新增死亡:{:<4}累积重症:{:<4}更新时间:{:<10}".format(self.area,self.curConfirm,self.curConfirmRelative,
|
|
self.asymptomatic,self.asymptomaticRelative,self.confirmed,self.confirmedRelative,self.crued,self.curedRelative,self.died,self.diedRelative,
|
|
self.icuDisable,newtime)
|
|
|
|
|
|
def getinsideData():
|
|
res=requests.get('https://voice.baidu.com/act/newpneumonia/newpneumonia/')
|
|
res=res.text
|
|
#script type="application/json"
|
|
soup=BeautifulSoup(res,'html.parser')
|
|
tag=soup.find('script',attrs={'id':'captain-config'})
|
|
tagstr=str(tag)
|
|
findinland=re.findall('caseList".*"caseOutsideList',tagstr)[0]
|
|
province=re.findall('\{"confirmed.*?subList":\[.*?\]\}',findinland)
|
|
provinces=Provinces()
|
|
for item in province:
|
|
js=json.loads(item)
|
|
p=Province(js)
|
|
provinces.addProvince(p)
|
|
#print(p)
|
|
#p.printEveryCity()
|
|
return provinces
|
|
|
|
def printStart():
|
|
provinces=getinsideData().province
|
|
for p in provinces:
|
|
print(p)
|
|
p.printEveryCity()
|
|
print("+++++++++++++++++"*6)
|
|
|
|
def mysqlStart(con):
|
|
provinces=getinsideData().province
|
|
for p in provinces:
|
|
p.insert_sql(con)
|
|
|
|
|
|
|