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

大家好,我是一只小白鼠,一只爱吃饼干的小白鼠。今天给大家讲讲关于爬取,以及如何爬取疫情数据并可视化。

上篇说到python绘制数码管,今天说如何用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 json
import csv

然后我们需要选择我们的目标网址。
发送请求

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

获取数据

data_html = response.text

解析数据

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)

保存数据

with open('data.csv', mode='a', encoding='utf-8', newline='') as f:
        csv_writer = csv.writer(f)

获取的结果

数据可视化

导入模块

from pyecharts import options as opts
from pyecharts.charts import Map
import pandas as pd

读取数据

df = 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_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()

今天的分享就到这里了,我们下期见。

物联沃分享整理
物联沃-IOTWORD物联网 » 【爬虫可视化】Python爬取疫情,可视化处理数据(爬虫入门案例)

发表评论