栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python网络爬虫及数据可视化(软科中国大学专业排名|计算机科学与技术)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python网络爬虫及数据可视化(软科中国大学专业排名|计算机科学与技术)

设计内容:

对中国大学专业排名网站中2021年,计算机科学与技术专业,进行数据爬取和数据可视化。

URL地址:https://www.shanghairanking.cn/rankings/bcmr/2021/080901

纪念下本学期的python期末大作业 ~~~

具体实现思路如下:

1.使用requests库中的get方法获取网页源代码。

2.配合使用BeautifulSoup进行简单的网页结构数据分析及清洗,提取出该专业的前10所大学的数据(学校名称、总分)。

3.使用matplotlib库绘制柱状图

一下是实现后的效果图:

在编写代码之前先将所使用到的库(requests、BeautifulSoup、lxml、matplotlib)安装配置好所需环境

>>>pip install requests
>>>pip install bs4
>>>pip install lxml
>>>pip install matplotlib

环境搭建完毕后下面进入正题,上代码:

# 导入requests
import requests
# 导入BeautifulSoup
from bs4 import BeautifulSoup
# 导入matplotlib
import matplotlib.pyplot as plt
import matplotlib as mpl

以上第一步,首先将下载好的库导入项目中。

第二步开始前我们需要对其网页html结构进行分析,在Chrome浏览器下按F12进入开发者工具,在开发者工具上方可以看到箭头一样的标识按钮,使用它可以快速跳转到指定样式的html结构内部,举个例子:

在这里我们可以得知我们需要的两个数据之一学校名称“清华大学”写在标签内,另外我们需要的表示学校分数的数据则写在标签内,其标签类名分别定义为:,,在该排名榜网页中其他的学校如:“北京大学”,“浙江大学”,“哈尔滨工业大学”...等也是如此结构,在我们了解需要的数据在html中的基本结构后就可以开始了

# 发送请求,获取响应
response = requests.get('https://www.shanghairanking.cn/rankings/bcmr/2021/080901')
# 从响应中获取数据
home_page = response.content.decode(encoding='utf-8')
# 创建BeautifulSoup对象
soup = BeautifulSoup(home_page, 'lxml')
# 查找网页中的学校名称和成绩数据
school_name = soup.find_all(attrs={'class': 'name-cn'})
score = soup.find_all(attrs={'class': 'score'})
# 创建两个新的列表以便后续使用
school_name_Result = []
score_Result = []
# 遍历将爬取出来的网页数据写入一个新的列表
for i in range(10):
    school_name_Result.append(school_name[i].text)
    score_Result.append(score[i].text)
# 逆序列表
school_name_Result.reverse()
score_Result.reverse()

以上步骤首先我们通过使用requests中的get方法对该网页进行发送请求,获取响应。

随后通过response.content.decode(encoding='utf-8')从响应中获取数据,创建BeautifulSoup对象将获取到的数据传入指定解析器为lxml。

在第二步开始前我们已经进行过分析

接着通过Beautiful下的find_all方法来通过attrs来指定属性字典进行查找获取到所有类名为'name-cn'的学校名称和类名为'score'的学校分数。

最后我们通过遍历并拿到所需的十组大学的数据(学校名称、学校分数)分别保存在两个新的列表中,通过reverse()方法进行逆序,将两组数据分别从先到后、从低到高排序。

# 设置窗体大小figsize长宽参数,bar长宽使用的数据
plt.figure(figsize=(15,5))
plt.bar(school_name_Result, score_Result)
# 数据可视化输出
plt.show()

第三步调用matplotlib库初始可视化界面默认参数,设置其长宽大小,x、y轴所使用到的数据,

最后通过show()方法显示可视化界面。

在这里我们可能会出现一个问题导致无法成功运行程序

 提示报错:UserWarning: Glyph 21271 (N{CJK UNIFIED IDEOGRAPH-5317}) missing from current font.
  FigureCanvasAgg.draw(self)

这是因为matplotlib中文乱码的问题

解决这个问题有两种方案:

①将Mircosoft YaHei UI字体文件(一般在C:WindowsFonts路径内可以找到)添加到

自己的python安装目录Libsite-packagesmatplotlibmpl-datafontsttf

②添加以下代码为matplotlib库指定默认字体:

# 解决Matplotlib中文乱码问题
mpl.rcParams['font.sans-serif'] = ['SimHei']

通过上述方案即可解决。

完成以上所有步骤后程序正常运行~~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/649790.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号