Python获取中国疫情数据(最新版)

获取疫情数据的脚本是2020年就写了,网上有多个地方可以获取;

比如百度有: 实时更新:新型冠状病毒肺炎疫情地图

腾讯有:实时更新:新冠肺炎疫情最新动态

因为一开始写的时候,觉得比较简单,所以一直没有分享出来

不过最近大家可能会发现,部分接口的脚本跑不通了,这里是因为某个接口拿到的json串已经不完整了,有乱码了,导致json解析失败,数据自然也用不了了(其实之前也出现过,短暂几天)

这个问题其实找出一个正常的api接口,换上就可以了

旧接口(json串不稳定)https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
新接口(稳定输出)https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=diseaseh5Shelf

为了解决问题,我这边分享一下我的疫情数据获取代码(原本我是用scrapy写的,这里稍微改成了普通py)

import requests
import json

def parse():
    # 新建用力啊存储数据的字典
    res_list = {}
    
    # 第一个接口
    req = requests.get('https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5')
    req_data = json.loads(req.text).get('data')
    
    # 验证第一个接口,不能用则用第二个接口
    try:
        # 第一个接口有时候data的json串不完整,导致报错
        print('开始验证第1个接口json')
        req_data = json.loads(req_data)
        print('第1个接口json验证通过')
    
    except:
        # 第二个接口
        print('第1个接口json验证不通过,开始使用和验证第2个接口')
        req = requests.get('https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=diseaseh5Shelf')
        req_data = json.loads(req.text).get('data')
        req_data = req_data.get('diseaseh5Shelf')
        print('第2个接口json验证通过')
    
    # 根据自己需要,获取相关数据
    lastupdatetime = req_data['lastUpdateTime']
    chinatotal = req_data['chinaTotal']
    chinaadd = req_data['chinaAdd']
    areaTree = req_data['areaTree'][0]
    res_list['lastUpdateTime'] = lastupdatetime
    res_list['chinaTotal'] = chinatotal
    res_list['chinaAdd'] = chinaadd
    res_list['citydata'] = []
    
    # 循环获取各个地区的数据
    for i_areaTree in areaTree['children']:
        i_areaTree = i_areaTree
        prov_name = i_areaTree['name']
    
        # 港澳台地区数据貌似不怎么更新,我就没管了
        if prov_name not in ['台湾', '香港', '澳门']:
            for i_areaTree_end in i_areaTree['children']:
                i_city_data = {}
                i_city_data['prov_name'] = prov_name
                i_city_data['city_name'] = i_areaTree_end['name']
                i_city_data['newconfirm'] = i_areaTree_end['today']['confirm']
                i_city_data['nowconfirm'] = i_areaTree_end['total']['nowConfirm']
                i_city_data['confirmed'] = i_areaTree_end['total']['confirm']
                # 20220112,字段suspect在接口中发现未提供了
                # i_city_data['suspect'] = i_areaTree_end['total']['suspect']
                i_city_data['suspect'] = 0
                i_city_data['dead'] = i_areaTree_end['total']['dead']
                i_city_data['heal'] = i_areaTree_end['total']['heal']
                i_city_data['grade'] = '' if (i_areaTree_end['total'].get('grade') is None) else \
                    i_areaTree_end['total']['grade']
                res_list['citydata'].append(i_city_data)
    
    # 打印所有结果
    print(res_list)


if __name__="__main__":
    # 运行数据获取程序
    res_list=parse()

通过如上,就可以获取到国内疫情,数据均放在字典 res_list 中。

大家获取数据后,可以根据自己的情况,进行数据的存储、查询和统计分析

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值