python爬虫:新冠疫情累计确诊数据爬取及数据可视化

一、数据爬取与整理

1.1 数据来源:丁香园网站
1.2 爬取思路:
  1. 使用requests包发送get请求,获取响应的html页面(返回值类型为str)
  2. 扫描字符串使用正则表达式匹配出描述国内数据的html语句
  3. 去除多余字符并将匹配后结果整理成json文件
1.3 代码展示及文件说明:
import json
import re
import requests
import datetime

today = datetime.date.today().strftime('%Y%m%d')

def crawl_dxy_data():
    """爬取丁香园实时统计数据,保存在data目录下,以当前日期作为文件名,文件格式为json格式
    """
    response = requests.get('https://ncov.dxy.cn/ncovh5/view/pneumonia')  # 发送get请求
    print(response.status_code)  # 打印状态码

    try:
        url_text = response.content.decode()  # 获取响应的html页面
        url_content = re.search(r'window.getAreaStat = (.*?)}]}catch',   # re.search()用于扫描字符串以查找正则表达式模式产生匹配项的第一个位置,然后返回相应的match对象
                                url_text, re.S)                         # 在字符串a中,包含换行符\n,这种情况下:如果不适用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始匹配
        texts = url_content.group()  # 获取匹配正则表达式的整体结果
        content = texts.replace('window.getAreaStat = ', '').replace('}catch', '')  # 去除多余字符
        json_data = json.loads(content)
        with open('data/' + today + '.json', 'w', encoding='UTF-8') as f:
            json.dump(json_data, f, ensure_ascii=False)
    except:
        print('<Response [%s]>' % response.status_code)

crawl_dxy_data()

说明:存储整理后数据的json文件保存在 ./data/ 文件夹下,内容如下
在这里插入图片描述

二、数据可视化

2.1 可视化工具:
使用了百度的pyecharts包,相关API接口参考:pyecharts接口手册
2.2 可视化代码展示
import json
import datetime

from pyecharts.charts import Map
from pyecharts import options as opts   # pyecharts接口手册:https://pyecharts.org/#/zh-cn/chart_api


# 读取原始文件
today = datetime.date.today().strftime('%Y%m%d')
datefile = 'data/' + today + '.json'
with open(datefile, 'r', encoding='UTF-8') as f:
    json_array = json.loads(f.read())

# 分析全国实时确诊数据: 'confirmedCount'字段
china_data = []
for province in json_array:
    china_data.append((province['provinceShortName'], province['confirmedCount']))
china_data = sorted(china_data, key=lambda x: x[1], reverse=True)   # reverse=True,表示降序

print(china_data)
# 全国疫情地图
# 定义每个字段的范围,以及每个字段的样式
pieces = [
    {'min': 10000, 'color': '#540d0d'},
    {'max': 9999, 'min': 1000, 'color': '#9c1414'},
    {'max': 999, 'min': 500, 'color': '#d92727'},
    {'max': 499, 'min': 100, 'color': '#ed3232'},
    {'max': 99, 'min': 10, 'color': '#f27777'},
    {'max': 9, 'min': 1, 'color': '#f7adad'},
    {'max': 0, 'color': '#f7e4e4'},
]
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]
m = Map()
m.add('累计确诊', [list(z) for z in zip(labels, counts)], 'china')

# 系列配置项,可配置图元样式、文字样式、标签样式、电线样式等
m.set_series_opts(label_opts=opts.LabelOpts(font_size=12), is_show=False)
# 全局配置项,可配置标题、动画、坐标轴、图例等
m.set_global_opts(title_opts=opts.TitleOpts(title='全国实时确诊数据', subtitle='数据来源:丁香园网站'),
                  legend_opts=opts.LegendOpts(is_show=False),
                  visualmap_opts=opts.VisualMapOpts(pieces=pieces, is_piecewise=True, is_show=True))    # is_piecewise参数表示是否分段,is_show参数表示是否显示视觉映射配置
# render()会生成本地html文件
filepath = './' + '新冠肺炎全国实时累计确诊数据' + today + '.html'
m.render(path=filepath)

说明:最终展示结果写入为html文件,保存在当前路径下,文件名为“新冠肺炎全国实时累计确诊数据,html”

2.3 可视化结果展示

在这里插入图片描述

  • 16
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值