前期准备工作
需要了解基本的python语法知识,可以参考我的另一篇文章,对python基础知识的总结,或者参考缪雪峰老师的python课程,是免费的。
我们先来了解一下爬虫
网络爬虫与浏览器的区别
浏览器是展示数据的,而网络爬虫是采集数据的
什么是网络爬虫
模拟客户端发送网络请求,获取响应数据,一种按照一定的规则,自动地抓取万维网信息的程序和脚本
网络爬虫的作用
从互联网上采集我们所需要的数据
本程序需要使用到的几个库:
1.Requests请求库
作用:Python HTTP请求库,发送请求,获取响应数据
- 导入模块
- 发送get请求,获取响应
- 从响应中获取数据
text 获取响应的字符串
encoding 二进制转换成字符时使用的方式
content 响应体bytes类型数据
安装:pip install requests
简单示例
2.模块lxml
作用:实现解析HTML、XML文档
数据提取:在发送请求获取响应后,可能存在多种不同类型的响应内容,我们只需要有用的部分
lxml是一款高性能的python HTML、XML解析器
XPath是一门在HTML、XML文档中查找信息的语言,可用在HTML、XML对元素和属性进行遍历
常用的几种使用方式
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
.选取当前节点
@选取属性
text()选择文本
匹配任何元素节点
安装:pip install lxml
例如
//script[@lang=”eng”] 选取所有tltle元素,且这些元素拥有值为eng的lang属性
简单示例
3.openpyxl库:实现Excel文件操作
安装:pip install openpyxl
创建表的简单示例
读取表的简单示例
4.wordcloud: 实现词云图生成
安装:pip install wordcloud
简单示例
下面进入正题
程序实现的思路
第一步:导入需要使用的模块
第二步:使用requests库发送请求,获取数据
第三步:获取数据内容,这里需要使用lxml模块,调用etree.HTML创建一个html对象,再使用xpath语法获取我们需要的数据。
通过浏览器自带的网站开发工具我们得知,所需要的数据都放在id=captain-config的script标签下,因为利用etree.HTML将字符串转化为Element对象,其具有xpath方法,返回的结果列表能够接收bytes类型的数据和str类型的数据。由此我们可以使用 html.xpath(‘//[@id=“captain-config”]/text()’)来获取id=captain-config标签下的text形式的数据。
第四步:由于第三步获取的数据并不是真正的“字典数据”,而是json类型的字符串数据,所以在此我们需要用到python自带的json模块,调用json.loads,把数据转化为python类型数据
这里需要说明:在我们使用 json.loads(result[0])获取的数据才转化为python的字典类型,之前是json类型的字符串,是使用的双引号,现在是单引号。使用[0]是因为,result是一个大的字典,我们需要的数据在第一个字典的元素里。
第五步:通过以获取到的数据,进一步通过网站的标签,获取到全球各国的疫情数据

经过研究和测试,能够推断出我们需要的全球疫情数据在键为component中,由上图知道component对应的值又是一个字典,取完component后,又是一个列表,我们需要再取第0个元素,由已知条件,我们能够推断出,键为caseOutsideList是全球各国疫情数据,键:globalList为各大洲的疫情数据
通过for循环,即可获取到各国数据,和各大洲疫情数据

第六步:调用openpyxl库,创建Excel表格,通过对第五步以获取到的全球疫情数据,以及各大洲疫情数据,进行遍历写进两个Excel表格
这里需要提醒的是,我们不是所有的数据都需要,而是截取了”国家”,“累计确诊”,“死亡”,“治愈”,“现有确诊”,“累计确诊增量”,“死亡增量”,“治愈的增量”,“现有确诊增量” 即对应的
‘area’、’confirmed’、’died’、’crued’、’curConfirm’、’confirmedRelative’、’diedRelative’、’curedRelative’、’curConfirmRelative’
“洲名”,“现有确诊”,“累计确诊”,“累计治愈”,“累计死亡”,“累计确诊增量”即对应的
‘area’、’confirmed’、’died’、’crued’、’curConfirm’、’confirmedRelative’、’diedRelative’、’curedRelative’、’curConfirmRelative’
通过遍历以获取的数据,组成一个新的列表。还通过for循环来判断数据是否为空,为空就补0
调用tqdm是为了添加进度条,使得程序运行过程更加直观,记得在最前面添加tqdm库
第七步:保存文件
第八步:通过调用openpyxl库读取,第七步保存的文件,获取疫情数据。同时,调用wordcloud库,在此,我们需要先创建一个空的字典,我们需要用wc.generate_from_frequencies()此方法(只需要传入一个字典{词:词频})它将会根据词频来自动生成图片,我们需要通过循环遍历文件,只需要获取{国家名称:累计确诊人数},{国家名称:累计死亡人数},{国家名称:现有确诊人数},{国家名称:累计治愈人数}传入到字典,再通过上述方法,完成创建出需要的词云图。
到此,通过python爬取疫情数据(全球疫情)的全过程就是这么多啦,爬取国内疫情数据,原理差不多。
项目效果
获取疫情数据

以下是获取到的疫情数据Excel表格


通过Excel生成词云图
生成词云图

显示云词图效果

才疏学浅,有写错的地方忘大佬多多指教

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/186021.html