写点什么

【爬虫 + 可视化】Python 爬取疫情并可视化处理数据(爬虫入门案例)

作者:BROKEN
  • 2022 年 8 月 04 日
  • 本文字数:3180 字

    阅读完需:约 10 分钟

【爬虫+可视化】Python爬取疫情并可视化处理数据(爬虫入门案例)

知识点

  1. 爬虫基本流程

  2. json

  3. requests 爬虫当中 发送网络请求

  4. pandas 表格处理 / 保存数据

  5. pyecharts 可视化


首先我们介绍一下什么是爬虫。

什么是爬虫?

网络爬虫是一种程序,主要用于搜索引擎,它将一个网站的所有内容与链接进行阅读,并建立相关的全文索引到数据库中,然后跳到另一个网站.样子好像一只大蜘蛛.

当人们在网络上(如 google)搜索关键字时,其实就是比对数据库中的内容,找出与用户相符合的.网络爬虫程序的质量决定了搜索引擎的能力,如 google 的搜索引擎明显要比百度好,就是因为它的网络爬虫程序高效,编程结构好.可以这么简单的理解一下爬虫。即请求网站并且提取自己所需的数据的一个过程。至于怎么爬如何爬,将是后面进行学习的内容,暂且不必深究。通过我们的程序,可以代替我们向服务器发送请求,然后进行批量、大量的数据的下载。

我们再来看看爬虫的基本流程。

爬虫的基本流程

发起请求:通过 url 向服务器发起 request 请求,请求可以包含额外的 header 信息。

获取响应内容:如果服务器正常响应,那我们将会收到一个 response,response 即为我们所请求的网页内容,或许包含 HTML,Json 字符串或者二进制的数据(视频、图片)等。

解析内容:如果是 HTML 代码,则可以使用网页解析器进行解析,如果是 Json 数据,则可以转换成 Json 对象进行解析,如果是二进制的数据,则可以保存到文件进行进一步处理。

保存数据:可以保存到本地文件,也可以保存到数据库(MySQL,Redis,Mongodb 等)

在了解上面的基本内容后,我们通过爬取疫情数据来加深我们对爬虫概念的理解。


  1. 发送请求

  2. 获取数据 网页源代码

  3. 解析数据 筛选一些我想用的数据

  4. 保存数据 保存成表格

  5. 做数据可视化分析

爬虫完整代码

导入模块

import requests     # 第三方模块(发送请求)import re           # 正则import jsonimport csv
复制代码

然后我们需要选择我们的目标网址。

发送请求

url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_aladin_banner'response = requests.get(url=url, headers=headers)
复制代码

解析数据

json_str = re.findall('"component":\[(.*)\],', data_html)[0]json_dict = json.loads(json_str)caseList = json_dict['caseList']for case in caseList:    area = case['area']        # 省份    curConfirm = case['curConfirm']         # 确诊人数    confirmedRelative = case['confirmedRelative']         # 新增人数    confirmed = case['confirmed']         # 累计确诊    crued = case['crued']                 # 累计确诊    died = case['died']                   # 累计确诊    print(area, curConfirm, confirmedRelative, confirmed, crued, died)
复制代码

数据可视化

导入模块

from pyecharts import options as optsfrom pyecharts.charts import Mapimport pandas as pd
复制代码

数据可视化

首先我们看看各地区确诊人数。

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_piecewise=True),    ))china_map.render_notebook()

复制代码

各地区死亡率和治愈率

line = (    Line()    .add_xaxis(list(df['province'].values))    .add_yaxis("治愈率", df['healRate'].values.tolist())    .add_yaxis("死亡率", df['deadRate'].values.tolist())    .set_global_opts(        title_opts=opts.TitleOpts(title="死亡率与治愈率"),
))line.render_notebook()
复制代码

各地区的死亡人数和治愈人数

bar = (    Bar()    .add_xaxis(list(df['province'].values)[:6])    .add_yaxis("死亡", df['dead'].values.tolist()[:6])    .add_yaxis("治愈", df['heal'].values.tolist()[:6])    .set_global_opts(        title_opts=opts.TitleOpts(title="各地区确诊人数与死亡人数情况"),        datazoom_opts=[opts.DataZoomOpts()],        ))bar.render_notebook()

复制代码

我们最后写个可视化的全国疫情地图

cofirm, currentCofirm, cured, dead = [], [], [], []
tab = Tab()
_map = ( Map(init_opts=opts.InitOpts(theme='dark', width='1000px')) .add("累计确诊人数", [list(i) for i in zip(df['area'].values.tolist(),df['confirmed'].values.tolist())], "china", is_map_symbol_show=False, is_roam=False) .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) .set_global_opts( title_opts=opts.TitleOpts(title="新型冠状病毒全国疫情地图", ), legend_opts=opts.LegendOpts(is_show=False), visualmap_opts=opts.VisualMapOpts(is_show=True, max_=1000, is_piecewise=False, range_color=['#FFFFE0', '#FFA07A', '#CD5C5C', '#8B0000']) ))tab.add(_map, '累计确诊')
_map = ( Map(init_opts=opts.InitOpts(theme='dark', width='1000px')) .add("当前确诊人数", [list(i) for i in zip(df['area'].values.tolist(),df['curConfirm'].values.tolist())], "china", is_map_symbol_show=False, is_roam=False) .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) .set_global_opts( title_opts=opts.TitleOpts(title="新型冠状病毒全国疫情地图", ), legend_opts=opts.LegendOpts(is_show=False), visualmap_opts=opts.VisualMapOpts(is_show=True, max_=100, is_piecewise=False, range_color=['#FFFFE0', '#FFA07A', '#CD5C5C', '#8B0000']) ))tab.add(_map, '当前确诊')
_map = ( Map(init_opts=opts.InitOpts(theme='dark', width='1000px')) .add("治愈人数", [list(i) for i in zip(df['area'].values.tolist(),df['crued'].values.tolist())], "china", is_map_symbol_show=False, is_roam=False) .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) .set_global_opts( title_opts=opts.TitleOpts(title="新型冠状病毒全国疫情地图", ), legend_opts=opts.LegendOpts(is_show=False), visualmap_opts=opts.VisualMapOpts(is_show=True, max_=1000, is_piecewise=False, range_color=['#FFFFE0', 'green']) ))tab.add(_map, '治愈')
_map = ( Map(init_opts=opts.InitOpts(theme='dark', width='1000px')) .add("死亡人数", [list(i) for i in zip(df['area'].values.tolist(),df['died'].values.tolist())], "china", is_map_symbol_show=False, is_roam=False) .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) .set_global_opts( title_opts=opts.TitleOpts(title="新型冠状病毒全国疫情地图", ), legend_opts=opts.LegendOpts(is_show=False), visualmap_opts=opts.VisualMapOpts(is_show=True, max_=50, is_piecewise=False, range_color=['#FFFFE0', '#FFA07A', '#CD5C5C', '#8B0000']) ))tab.add(_map, '死亡')
tab.render_notebook()

复制代码


发布于: 刚刚阅读数: 3
用户头像

BROKEN

关注

还未添加个人签名 2022.08.02 加入

还未添加个人简介

评论

发布
暂无评论
【爬虫+可视化】Python爬取疫情并可视化处理数据(爬虫入门案例)_Python_BROKEN_InfoQ写作社区