android系统定制开发【爬虫+可视化】Python爬取疫情并可视化处理数据(爬虫入门案例)

大家好,android系统定制开发我是一只小白鼠,android系统定制开发一只爱吃饼干的小白鼠。android系统定制开发今天给大家讲讲关于爬取,android系统定制开发以及如何爬取疫情数据并。

上篇说到,今天说如何用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
  • 1
  • 2
  • 3
  • 4

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

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

获取数据

data_html = response.text
  • 1

解析数据

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

保存数据

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

数据可视化

导入模块

from pyecharts import options as optsfrom pyecharts.charts import Mapimport pandas as pd
  • 1
  • 2
  • 3

读取数据

df = pd.read_csv('data.csv', encoding='utf-8')
  • 1

数据可视化
首先我们看看各地区确诊人数。

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

各地区死亡率和治愈率

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发