Python实现实时数据采集新型冠状病毒数据实例
源代码来源:https://github.com/Programming-With-Love/2019-nCoV
疫情数据时间为:2020.2.1
项目相关截图:
全国数据展示
国内数据展示
国外数据展示
查看指定区域详细数据
源代码,注意安装所需模块(例如pipinstall模块名)
importrequests
importre
frombs4importBeautifulSoup
fromtimeimportsleep
importjson
fromprettytableimportALL
fromprettytableimportPrettyTable
hubei={}
guangdong={}
zhejiang={}
beijing={}
shanghai={}
hunan={}
anhui={}
chongqing={}
sichuan={}
shandong={}
guangxi={}
fujian={}
jiangsu={}
henan={}
hainan={}
tianjin={}
jiangxi={}
shanxi1={}#陕西
guizhou={}
liaoning={}
xianggang={}
heilongjiang={}
aomen={}
xinjiang={}
gansu={}
yunnan={}
taiwan={}
shanxi2={}#山西
jilin={}
hebei={}
ningxia={}
neimenggu={}
qinghai={}#none
xizang={}#none
provinces_idx=[hubei,guangdong,zhejiang,chongqing,hunan,anhui,beijing,
shanghai,henan,guangxi,shandong,jiangxi,jiangsu,sichuan,
liaoning,fujian,heilongjiang,hainan,tianjin,hebei,shanxi2,
yunnan,xianggang,shanxi1,guizhou,jilin,gansu,taiwan,
xinjiang,ningxia,aomen,neimenggu,qinghai,xizang]
map={
'湖北':0,'广东':1,'浙江':2,'北京':3,'上海':4,'湖南':5,'安徽':6,'重庆':7,
'四川':8,'山东':9,'广西':10,'福建':11,'江苏':12,'河南':13,'海南':14,
'天津':15,'江西':16,'陕西':17,'贵州':18,'辽宁':19,'香港':20,'黑龙江':21,
'澳门':22,'新疆':23,'甘肃':24,'云南':25,'台湾':26,'山西':27,'吉林':28,
'河北':29,'宁夏':30,'内蒙古':31,'青海':32,'西藏':33
}
defgetTime(text):
TitleTime=str(text)
TitleTime=re.findall('(.*?)',TitleTime)
returnTitleTime[0]
defgetAllCountry(text):
AllCountry=str(text)
AllCountry=AllCountry.replace("[","")
AllCountry=AllCountry.replace("","")
AllCountry=re.sub("","",AllCountry)
AllCountry=AllCountry.replace("]","")
AllCountry=AllCountry.replace("","")
AllCountry=re.sub("","",AllCountry)
AllCountry=re.sub("","",AllCountry)
AllCountry=re.sub("
","",AllCountry)
returnAllCountry
defquery(province):
table=PrettyTable(['地区','确诊','死亡','治愈'])
for(k,v)inprovince.items():
name=k
table.add_row([name,v[0]ifv[0]!=0else'-',v[1]ifv[1]!=0else'-',v[2]ifv[2]!=0else'-'])
iflen(province.keys())!=0:
print(table)
else:
print("暂无")
defgetInfo(text):
text=str(text)
text=re.sub("","",text)
text=re.sub("","",text)
returntext
defis_json(json_str):
try:
json.loads(json_str)
exceptValueError:
returnFalse
returnTrue
defff(str,num):
returnstr[:num]+str[num+1:]
defmain():
url="https://3g.dxy.cn/newh5/view/pneumonia"
try:
headers={}
headers['user-agent']='Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.77Safari/537.36'#http头大小写不敏感
headers['accept']='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
headers['Connection']='keep-alive'
headers['Upgrade-Insecure-Requests']='1'
r=requests.get(url,headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
soup=BeautifulSoup(r.text,'lxml')
table=PrettyTable(['地区','确诊','死亡','治愈'])
table.hrules=ALL
####截至时间
#TitleTime=getTime(soup.select('.title___2d1_B'))
print()
#print("",TitleTime+"\n")
whileTrue:
r=requests.get("https://service-f9fjwngp-1252021671.bj.apigw.tencentcs.com/release/pneumonia")
json_str=json.loads(r.text)
ifjson_str['error']==0:
break
print("==================================全国数据==================================")
print()
print("确诊"+str(json_str['data']['statistics']['confirmedCount'])+"例"
+""+"疑似"+str(json_str['data']['statistics']['suspectedCount'])+"例"
+""+"死亡"+str(json_str['data']['statistics']['deadCount'])+"例"
+""+"治愈"+str(json_str['data']['statistics']['curedCount'])+"例\n")
print("==================================相关情况==================================")
print()
print("传染源:"+json_str['data']['statistics']['infectSource'])
print("病毒:"+json_str['data']['statistics']['virus'])
print("传播途径:"+json_str['data']['statistics']['passWay'])
print(json_str['data']['statistics']['remark1'])
print(json_str['data']['statistics']['remark2']+"\n")
print("==================================国内情况==================================")
print()
json_provinces=re.findall("{\"provinceName\":(.*?)]}",str(soup))
idx=0
forprovinceinjson_provinces:
ifis_json(province):
pass
else:
province="{\"provinceName\":"+province+"]}"
province=json.loads(province)
province_name=province['provinceShortName']ifprovince['provinceShortName']!=0else'-'
confirmed=province['confirmedCount']ifprovince['confirmedCount']!=0else'-'
suspected=province['suspectedCount']ifprovince['suspectedCount']!=0else'-'
cured=province['curedCount']ifprovince['curedCount']!=0else'-'
dead=province['deadCount']ifprovince['deadCount']!=0else'-'
table.add_row([province_name,confirmed,dead,cured])
map[province_name]=idx
idx=idx+1
forcityinprovince['cities']:
provinces_idx[map[province_name]][city['cityName']]=[city['confirmedCount'],city['deadCount'],city['curedCount']]
print(table)
print()
print("==================================国外情况==================================")
print()
json_provinces=str(re.findall("\"id\":949(.*?)]}",str(soup)))
json_provinces=json_provinces[:1]+"{\"id\":949"+json_provinces[2:]
json_provinces=json_provinces[:len(json_provinces)-2]+json_provinces[len(json_provinces)-1:]
provinces=json.loads(json_provinces)
table=PrettyTable(['地区','确诊','死亡','治愈'])
forprovinceinprovinces:
confirmed=province['confirmedCount']ifprovince['confirmedCount']!=0else'-'
dead=province['deadCount']ifprovince['deadCount']!=0else'-'
cured=province['curedCount']ifprovince['curedCount']!=0else'-'
table.add_row([province['provinceName'],confirmed,dead,cured])
print(table)
print()
print("==================================最新消息==================================")
print()
idx=0
fornewsinjson_str['data']['timeline']:
ifidx==5:
break
print(news['pubDateStr']+""+news['title'])
idx=idx+1
print()
key=input("请输入您想查询详细信息的省份,例如湖北\n")
print()
ifkeyinmap.keys():
query(provinces_idx[map[key]])
else:
print("暂无相关信息")
print("\n欢迎提出各种意见")
except:
print("连接失败")
if__name__=='__main__':
main()
sleep(30)
以上就是Python实时数据采集-新型冠状病毒的详细内容,大家出门要做好安全措施,感谢对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。