import requests import re from bs4 import BeautifulSoup import json import pymysql import time #定义类 class summaryDataOut: def __init__(self,js={}): self.confirmed=0 self.died=0 self.curConfirm=0 self.cured=0 self.confirmedRelative=0 self.curedRelative=0 self.diedRelative=0 self.curConfirmRelative=0 self.time='' def get_db_tuple(self): return (self.confirmed,self.died,self.curConfirm,self.cured,self.confirmedRelative,self.curedRelative,self.diedRelative,self.curConfirmRelative,self.time) def delete_sql(self,con): sql=""" delete from outsideSummary """ try: cursor=con.cursor() cursor.execute(sql) except Exception as e: print(e) print('delete outside summary failed.') else: print('delete outside summary successfully') def insert_sql(self,con): self.delete_sql(con) sql="""insert into outsideSummary(confirmed,died,curConfirm,cured, confirmedRelative,curedRelative,diedRelative,curConfirmRelative,time) values(%s,%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 outsideSummary failed.') else: print('Inserted outsideSummary successfully') def blankNum (self,object): return ' '*(12-len(str(object))) def PrintOut(self): print("截至%s国外疫情概况:"%self.time) print("现有确诊:%d" % self.curConfirm, end=self.blankNum(self.curConfirm)) print("相对昨日新增:%d"%self.curConfirmRelative) print("累计确诊:%d"%self.confirmed,end=self.blankNum(self.confirmed)) print("相对昨日新增:%d"%self.confirmedRelative) print("累计治愈:%d"%self.cured,end=self.blankNum(self.cured)) print("相对昨日新增:%d"%self.curedRelative) print("累计死亡:%d"%self.died,end=self.blankNum(self.died)) print("相对昨日新增:%d"%self.diedRelative) def getoutsideSummary(): # 获取数据 req = requests.get ('https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_3#tab4') content = req.content.decode('utf-8') soup = BeautifulSoup(content,'html.parser') # 过滤筛选 tag = soup.find('script',attrs={'type':'application/json','id':'captain-config'}) tagstr=tag.string #标签转化为字符串 tagdic=json.loads(tagstr) #标签字符串转化为字典 component=tagdic['component'][0] #获得疫情状况字典 time= component['mapLastUpdatedTime'] #字典中找出时间 result = component['summaryDataOut'] #字典中找出'component'key下的'summaryDataOut'key内容 # 存储 OutData=summaryDataOut() OutData.confirmed=int(result['confirmed']) OutData.confirmedRelative=int(result['confirmedRelative']) OutData.cured=int(result['cured']) OutData.curedRelative=int(result['curedRelative']) OutData.died=int(result['died']) OutData.diedRelative=int(result['diedRelative']) OutData.curConfirm=int(result['curConfirm']) OutData.curConfirmRelative=int(result['curConfirmRelative']) # OutData.time=time return OutData def printStart(): getoutsideSummary().PrintOut() def mysqlStart(con): sum=getoutsideSummary() sum.insert_sql(con)