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.
p9ew5o3q7/insideData.py

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)