import requests import re from bs4 import BeautifulSoup import json import time class City: def __init__(self,tempjs={},city='无数据',confiemed='无数据',died='无数据',crued='无数据',confirmedRelative='无数据',cityCode='无数据'): self.city=city self.confirmed=confiemed self.died=died self.crued=crued self.confirmedRelative=confirmedRelative self.cityCode=cityCode js={'city': '无数据', 'confirmed': '无数据', 'died': '无数据', 'crued': '无数据', 'confirmedRelative': '无数据', 'curConfirm': '无数据', 'cityCode': '无数据'} for k,v in tempjs.items(): if tempjs[k]!='': js[k]=v self.city=js["city"] self.confirmed=js["confirmed"] self.died=js["died"] self.crued=js["crued"] self.confirmedRelative=js["confirmedRelative"] self.cityCode=js["cityCode"] 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='无数据',died='无数据',crued='无数据',relativeTime='无数据',confirmedRelative='无数据', diedRelative='无数据',curedRelative='无数据',asymptomaticRelative='无数据',asymptomatic='无数据', curConfirm='无数据',curConfirmRelative='无数据',icuDisable='无数据',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': '无数据', 'died': '无数据', 'crued': '无数据', 'relativeTime': '无数据', 'confirmedRelative': '无数据', 'diedRelative': '无数据', 'curedRelative': '无数据', 'asymptomaticRelative': '无数据', 'asymptomatic': '无数据', 'curConfirm': '无数据', 'curConfirmRelative': '无数据', 'icuDisable': '无数据', '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"] for c in cities: city=City(c) subList.append(city) def printEveryCity(self): for c in self.subList: city=City(c) 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 start(): 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() print("++++++++++++++++++++++++++++++"*4) #provinces.printEveryProvince()