大家好,android系统定制开发我是一只小白鼠,android系统定制开发一只爱吃饼干的小白鼠。android系统定制开发今天给大家讲讲关于爬取,android系统定制开发以及如何爬取疫情数据并。
上篇说到,今天说如何用python简单。
知识点
- 爬虫基本流程
- json
- requests 爬虫当中 发送网络请求
- pandas 表格处理 / 保存数据
- pyecharts 可视化
首先我们介绍一下什么是爬虫。
什么是爬虫?
网络爬虫是一种程序,主要用于搜索引擎,它将一个网站的所有内容与链接进行阅读,并建立相关的全文索引到数据库中,然后跳到另一个网站.样子好像一只大蜘蛛.
当人们在网络上(如google)搜索关键字时,其实就是比对数据库中的内容,找出与用户相符合的.网络爬虫程序的质量决定了搜索引擎的能力,如google的搜索引擎明显要比百度好,就是因为它的网络爬虫程序高效,编程结构好.可以这么简单的理解一下爬虫。即请求网站并且提取自己所需的数据的一个过程。至于怎么爬如何爬,将是后面进行学习的内容,暂且不必深究。通过我们的程序,可以代替我们向服务器发送请求,然后进行批量、大量的数据的下载。
我们再来看看爬虫的基本流程。
爬虫的基本流程
发起请求:通过url向服务器发起request请求,请求可以包含额外的header信息。
获取响应内容:如果服务器正常响应,那我们将会收到一个response,response即为我们所请求的网页内容,或许包含HTML,Json字符串或者二进制的数据(视频、图片)等。
解析内容:如果是HTML代码,则可以使用网页解析器进行解析,如果是Json数据,则可以转换成Json对象进行解析,如果是二进制的数据,则可以保存到文件进行进一步处理。
保存数据:可以保存到本地文件,也可以保存到数据库(MySQL,Redis,Mongodb等)
在了解上面的基本内容后,我们通过爬取疫情数据来加深我们对爬虫概念的理解。
- 发送请求
- 获取数据 网页源代码
- 解析数据 筛选一些我想用的数据
- 保存数据 保存成表格
- 做数据可视化分析
爬虫完整代码
导入模块
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
今天的分享就到这里了,我们下期见。