疫情降临转眼已经第三年了,时间过得真快,愿疫情早点结束,世界不再多灾多难。最近疫情稍微好转一些了,所以咱们获取一下最新的疫情数据,做个可视化地图看看。
效果展示
获取到的数据咱们保存到表格
可视化地图
颜色是跟网上的一样,可以跟随鼠标移动变色,展示数据的。
还可以实现这种更好看的
以及柱状图
还等什么,我们直接开始把~
准备工作
涉及知识点
- 爬虫基本流程
- requests 发送请求
- re 正则表达式
- json 结构化数据解析
- pyecharts 可视化
开发环境
代码语言:javascript复制python 3.8: 解释器pycharm: 代码编辑器
实现流程
- 发送请求
- 获取数据
- 解析数据
- 保存数据
- 可视化分析
前四步的话,基本大部分*虫都是如此。
具体操作,我就不详细写了,这个视频第56集有详细讲,前面几集也有基本思路,可以说很全面。
代码总是学完就忘记?100个爬虫实战项目!让你沉迷学习丨学以致用丨下一个Python大神就是你!
每次都写流程,有人看还好,没人看的话,或者看了又没人点赞收藏,就渐渐的没动力了。
索性直接用视频讲解放在那里,嘿嘿~
不过不要慌,代码里我都写了注释的。
代码展示
又到了紧张刺激的环节了
1、获取数据部分
代码语言:javascript复制import requests # 发送请求 第三方模块 额外安装吧import re # 内置模块 无需安装import jsonimport csv# 伪装 字典headers = {# 浏览器基本信息'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}with open('data.csv', mode='a', encoding='utf-8', newline='') as f:csv_writer = csv.writer(f)csv_writer.writerow(['area', 'curConfirm', 'curConfirmRelative', 'confirmed', 'crued', 'died'])url = 'https://voice.这里加上我国网民最常用的那个网站地址/act/newpneumonia/newpneumonia/?from=osari_aladin_banner'# 1. 发送请求# x=1,y=2response = requests.get(url=url, headers=headers)# 2. 获取数据# <Response [200]>: 访问成功html_data = response.text# print(html_data)# 3. 解析数据 正则# a. 告诉他 我们要怎么查找 "component":[(.*?)]# b. 我们在哪里查找# 正则会把所有能匹配到的数据都会给到我们# (.*?)# .*匹配任意字符 0次或者多次# ? 非贪婪匹配符json_str = re.findall('"component":[(.*)],', html_data)[0]# 类型 转化一下 字典json_dict = json.loads(json_str)caseList = json_dict['caseList']for case in caseList:area = case['area'] # 省份curConfirm = case['curConfirm'] # 确诊人数curConfirmRelative = case['curConfirmRelative'] # 当前确诊confirmed = case['confirmed'] # 累计确诊crued = case['crued'] # 治愈人数died = case['died'] # 死亡人数print(area, curConfirm, curConfirmRelative, confirmed, crued, died)with open('data.csv', mode='a', encoding='utf-8', newline='') as f:csv_writer = csv.writer(f)csv_writer.writerow([area, curConfirm, curConfirmRelative, confirmed, crued, died])
2、可视化部分
代码语言:javascript复制import pandas as pdfrom pyecharts.charts import Mapfrom pyecharts import options as optsdf = pd.read_csv('data.csv', encoding='utf-8')china_map = (Map().add('现有确诊', [list(i) for i in zip(df['area'].values.tolist(), df['curConfirm'].values.tolist())], 'china').set_global_opts(title_opts=opts.TitleOpts(title='各地区确诊人数'),visualmap_opts=opts.VisualMapOpts(max_=200, is_inverse=True)))china_map.render('demo.html')
这里只有第一种可视化效果,其它的都是ipynb 格式的,我懒得打开了~
收藏 | 0点赞 | 0打赏