前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

作者头像
小蓝枣
发布2022-04-01 10:15:40
3.2K0
发布2022-04-01 10:15:40
举报
文章被收录于专栏:CSDN博客专家-小蓝枣的博客

Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解

系列文章篇

Python 地图篇 - 使用 pyecharts 绘制世界地图、中国地图、省级地图、市级地图实例详解

专栏推荐

Python 短视频自动化发布,包含抖音、快手、bilibili、小红书、微视、好看视频、西瓜视频、微信视频号等 10 余种平台

效果图展示

这是省份的:

这是城市的:

第一章:疫情信息的下载与数据提取

① 爬取页面数据到本地

通过 BeautifulSoup 库解析代码,将疫情信息内容下载到本地 txt 文件用于数据分析使用。

代码语言:javascript
复制
from urllib.request import urlopen
from bs4 import BeautifulSoup

def dxy_data_down(article_url):
    """
     xiaolanzao, 2022.02.27
    【作用】
     下载疫情数据信息
    【参数】
     article_url : 需要下载数据的地址
    【返回】
     无
    """
    url = urlopen(article_url)
    soup = BeautifulSoup(url, 'html.parser')   # parser解析
    
    f = open("疫情数据.txt","w",encoding="utf-8")
    f.write(str(soup))
    f.close()

dxy_data_down("https://ncov.dxy.cn/ncovh5/view/pneumonia")

下载后的数据

② json 字符串正则表达式分析

通过分析文件查找到

需要数据的 json 字符串前关键词 "try { window.getAreaStat = "

json 字符串后关键词 }catch(e){}

(.*?) 是匹配所有内容。

整合的正则表达式为如下:

代码语言:javascript
复制
# json字符串前后关键词
json_start = "try { window.getAreaStat = "
# 字符串包含的括号要进行转义
json_end = "}catch\(e\){}"

# json字符串正则匹配
# (.*?)是匹配所有内容
regular_key = json_start + "(.*?)" + json_end

③ 提取数据中的 json 字符串

读取本地文件,提取里面的 json 字符串数据。

代码语言:javascript
复制
import re

def get_json():
    """
     xiaolanzao, 2022.02.27
    【作用】
     读取本地文件,获取json信息
    【参数】
     无
    【返回】
     json字符串
    """
    # 读取本地文件
    f = open("疫情数据.txt", "r", encoding="utf-8")
    f_content = f.read()
    f.close()
    
    # json字符串前后关键词
    json_start = "try { window.getAreaStat = "
    # 字符串包含的括号要进行转义
    json_end = "}catch\(e\){}"
    
    # json字符串正则匹配
    # (.*?)是匹配所有内容
    regular_key = json_start + "(.*?)" + json_end
    # 参数rs.S可以无视换行符,将所有文本视作一个整体进行匹配
    re_content = re.search(regular_key, f_content, re.S)
    # group()用于获取正则匹配后的字符串
    content = re_content.group()
    
    # 去除json字符串的前后关键词
    content = content.replace(json_start, '')
    # 尾巴要去掉转义符号
    json_end = "}catch(e){}"
    content = content.replace(json_end, '')
    
    print(content)
    return content

json_content = get_json()

读取后的内容:

第二章:疫情信息数据分析

① 提取 json 字符串里的省份疫情数据并显示

方法里所传入的数据是上面返回的 json 字符串。

代码语言:javascript
复制
import json

def display_provinces(json_content):
    """
     xiaolanzao, 2022.02.27
    【作用】
     展示省份疫情
    【参数】
     json_content : json字符串
    【返回】
     无
    """
    # 将字符串转化为字典
    json_data = json.loads(json_content)
    
    # 省份数据展示
    print("全国各省份疫情数据如下:")
    for i in json_data:
        print("【省份名】:" + i["provinceName"])
        print("现存确诊:" + str(i["currentConfirmedCount"]))
        print("累计确诊:" + str(i["confirmedCount"]))
        print("死亡:" + str(i["deadCount"]))
        print("治愈:" + str(i["curedCount"]))
        print()

display_provinces(json_content)

运行效果图:

可以对比下数据是一致的

② 显示查询省份的城市疫情数据

城市数据在省份数据的 cities 里面。

代码语言:javascript
复制
import json

def display_citys(json_content, province_name):
    """
     xiaolanzao, 2022.02.27
    【作用】
     展示城市疫情
    【参数】
     json_content : json字符串
     province_name : 需要查询的省份名
    【返回】
     无
    """
    # 将字符串转化为字典
    json_data = json.loads(json_content)
    
    # 省份数据展示
    print(province_name + "疫情数据如下:")
    for i in json_data:
        # print(i)
        if(i["provinceName"] == province_name):
            # 读取里面的城市信息
            try:
                citys = i["cities"]
                for ii in citys:
                    print("【城市名】:" + ii["cityName"])
                    print("现存确诊:" + str(ii["currentConfirmedCount"]))
                    print("累计确诊:" + str(ii["confirmedCount"]))
                    print("死亡:" + str(ii["deadCount"]))
                    print("治愈:" + str(ii["curedCount"]))
                    print()
            except Exception as e:
                print(e)
                print("没有相应的城市信息!")

display_citys(json_content, "河北省")

运行效果图:

可以对比下数据是一致的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解
  • 效果图展示
  • 第一章:疫情信息的下载与数据提取
  • ① 爬取页面数据到本地
  • ② json 字符串正则表达式分析
  • ③ 提取数据中的 json 字符串
  • 第二章:疫情信息数据分析
  • ① 提取 json 字符串里的省份疫情数据并显示
  • ② 显示查询省份的城市疫情数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档