Python实战:利用requests与matplotlib爬取并可视化江苏疫情实时数据

闻溪
闻溪
发布时间:2026-10-15 | 4人浏览过
原创

本文介绍如何使用Python的requests库抓取腾讯新闻疫情实时数据接口,并通过json解析提取全国及江苏省各地级市的确诊、新增及治愈数据。结合PrettyTable美化输出,最后利用matplotlib库对江苏各地市疫情分布进行可视化分析,直观展示扬州等地疫情状况。

1.引言

近期,江苏南京与湖南张家界等地相继出现疫情反弹,影响范围已扩展至8省22市。目前全国划定有2个高风险地区和52个中风险地区。身处南京的笔者作为普通市民,深切关注疫情动态。为了实时掌握最新疫情信息,本文将演示如何使用Python编写爬虫程序,抓取并分析最新的疫情实时数据。

2.获取目标网站

为实现Python对疫情数据的自动化采集,首先需要确定数据来源。国内主流的新闻平台如腾讯新闻、网易新闻等均提供疫情实时追踪服务,内容涵盖国内疫情概况、海外疫情动态、每日新增确诊趋势以及疫苗接种进度等。本文选取腾讯新闻的疫情发布页面作为数据源进行爬取与分析。

网站分析:

  • 使用Chrome浏览器访问疫情发布页网址,界面显示如上图所示。
  • 按下F12键进入开发者工具模式,随后按Ctrl+R刷新页面以加载网络请求。
  • 在Network(网络)面板中查找名为getOnsInfo?name=disease_h5的请求,从而获取用于爬取的目标API网址。

3.爬取目标网站

编写爬虫程序前,需确保已安装Python的requests库,安装命令如下:

pip3 install requests

仅需三行核心代码即可获取该网页返回的数据内容,具体代码如下:


url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
req = requests.get(url=url)
content = json.loads(req.text)

执行代码后打印出的爬取结果如下:

4.解析爬取内容

虽然成功获取了网页数据,但原始数据通常为JSON格式,我们需要对其进行解析,从中提取感兴趣的关键信息。

4.1. 解析全国今日总况

对应的数据解析代码如下:


def get_all_china(content):
    tmp_data = content["data"]
    area_data = json.loads(tmp_data)["areaTree"]
    country = area_data[0]
    country_list = []
    name = country["name"]
    today_confirm = country["today"]["confirm"]
    now_confirm = country["total"]["nowConfirm"]
    total_confirm = country["total"]["confirm"]
    total_heal = country["total"]["heal"]
    country_list.append([name, today_confirm, now_confirm, total_confirm, total_heal])
    return country_list

运行代码后的输出结果如下:

原始输出格式较为杂乱,此处引入PrettyTable库对输出结果进行美化处理,代码如下:


def format_list_prettytable(title,province_list):
    table = PrettyTable(title)
    for province in province_list:
        table.add_row(province)
    table.border = True
    return table

美化后的结果如下:

4.2. 解析全国各省份疫情情况

参照上述逻辑,可进一步解析全国各省市的具体疫情数据,代码如下:


def get_all_province(content):
    tmp_data = content["data"]
    area_data = json.loads(tmp_data)["areaTree"]
    data = area_data[0]['children']

    province_list = []
    for province in data:
        name = province["name"]
        today_confirm = province["today"]["confirm"]
        now_confirm = province["total"]["nowConfirm"]
        total_confirm = province["total"]["confirm"]
        total_heal = province["total"]["heal"]
        province_list.append([name, today_confirm, now_confirm, total_confirm, total_heal])
    return province_list

运行结果如下:

4.3. 解析江苏各地级市疫情情况

最后,我们重点获取江苏省内各地级市的详细疫情数据,代码如下:


def parse_jiangsu_province(content,key_province):
    tmp_data = content["data"]
    area_data = json.loads(tmp_data)["areaTree"]
    data = area_data[0]['children']

    city_list = []
    for province in data:
        name = province["name"]
        if name == key_province:
            children_list = province["children"]
            for children in children_list:
                city = children["name"]
                today_new = children["today"]["confirm"]
                now_confirm = children["total"]["nowConfirm"]
                total_confirm = children["total"]["confirm"]
                total_heal = children["total"]["heal"]
                city_list.append([city, today_new, now_confirm, total_confirm, total_heal])
    return city_list

运行结果如下:

5.结果可视化

使用matplotlib库对前述爬取的江苏各地级市疫情数据进行可视化展示,得到图表如下:

今日新增确诊病例的可视化结果如下:

现有确诊病例数的可视化结果如下:

从上述图表分析可见,疫情已扩散至扬州地区,且扬州今日新增感染人数居首,需引起高度重视。

6. 代码

完整代码

https://github.com/sgzqc/wechat/tree/main/20210731

7. 参考

链接一

至此,关于Python获取江苏疫情实时数据及爬虫分析的文章介绍完毕。如需了解更多Python相关江苏疫情内容,欢迎搜索本站往期文章或继续浏览后续内容,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表