爬虫与数据分析结合案例:中国大学排名爬取与分析全流程

爬虫与数据分析结合案例:中国大学排名爬取与分析全流程

一、案例背景与目标

本案例以高三网中国大学排名(网址:2021中国的大学排名一览表_高三网)为数据源,完成从数据爬取到分析可视化的全流程实践。主要目标包括:

  1. 爬取学校名称、总分、全国排名、星级排名、办学层次等信息
  2. 对爬取的数据进行预处理(处理缺失值)
  3. 通过可视化图表分析学校星级分布情况

二、数据爬取实现

1. 核心步骤

爬取过程分为三个关键环节:获取网页内容、解析数据、保存为 CSV 文件。

(1)获取网页内容

使用requests库发送 HTTP 请求,处理编码和异常:

import requestsdef get_html(url, time=3):try:r = requests.get(url, timeout=time)r.encoding = r.apparent_encoding  # 自动识别编码r.raise_for_status()  # 状态码非200时抛出异常return r.textexcept Exception as error:print(error)
(2)解析网页数据

BeautifulSoup解析 HTML,通过 CSS 选择器定位表格数据:

from bs4 import BeautifulSoupdef parser(html):soup = BeautifulSoup(html, "lxml")out_list = []for row in soup.select("table>tbody>tr"):  # 遍历表格行td_html = row.select("td")  # 获取单元格row_data = [td_html[1].text.strip(),  # 学校名称td_html[2].text.strip(),  # 总分td_html[3].text.strip(),  # 全国排名td_html[4].text.strip(),  # 星级排名td_html[5].text.strip()   # 办学层次]out_list.append(row_data)return out_list
(3)保存为 CSV 文件

使用csv模块将数据写入文件:

import csvdef save_csv(item, path):with open(path, "wt", newline="", encoding="utf-8") as f:csv_write = csv.writer(f)csv_write.writerows(item)  # 批量写入数据
(4)主程序调用
if __name__ == "__main__":url = "http://www.bspider.top/gaosan/"html = get_html(url)out_list = parser(html)save_csv(out_list, "school.csv")

三、数据预处理:处理缺失值

爬取的school.csv中 “总分” 列存在空值,需用 Pandas 处理,提供四种方案:

1. 删除含空值的行

import pandas as pd
df = pd.read_csv("school.csv")
new_df = df.dropna()  # 直接删除含空值的行
print(new_df.to_string())

2. 用指定内容替换空值

df.fillna("暂无分数信息", inplace=True)  # 统一替换为文本

3. 用均值替换空值

x = df["总分"].mean()  # 计算总分均值
df["总分"].fillna(x, inplace=True)  # 填充空值

4. 用中位数替换空

x = df["总分"].median()  # 计算总分中位数
df["总分"].fillna(x, inplace=True)

四、数据分析与可视化

1. 数据概况

共爬取 820 所学校,星级分布如下:

  • 8 星:8 所
  • 7 星:16 所
  • 6 星:36 所
  • 5 星:59 所
  • 4 星:103 所
  • 3 星:190 所
  • 2 星:148 所
  • 1 星:260 所

2. 可视化图表

(1)柱形图:展示不同星级学校数量
import matplotlib.pyplot as plt
import numpy as npx = np.array(["8星", "7星", "6星", "5星", "4星", "3星", "2星", "1星"])
y = np.array([8, 16, 36, 59, 103, 190, 148, 260])plt.title("不同星级的学校个数")
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 解决中文显示问题
plt.bar(x, y)  # 垂直柱形图
# 或使用水平柱形图:plt.barh(x, y)
plt.show()
(2)饼图:展示星级占比
y = np.array([1, 2, 4.5, 7.2, 12.5, 23.1, 18, 31.7])  # 各星级占比(%)
plt.pie(y,labels=["8星", "7星", "6星", "5星", "4星", "3星", "2星", "1星"]
)
plt.title("不同星级的学校个数占比")
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.show()

五、案例总结

本案例完整演示了 “爬虫 - 预处理 - 分析” 的闭环流程:

  1. 爬虫阶段:通过requestsBeautifulSoup高效获取结构化表格数据
  2. 预处理阶段:针对缺失值提供多种处理方案,根据实际需求选择(如均值填充适合对称分布数据)
  3. 可视化阶段:用柱形图展示数量差异,饼图展示占比关系,直观呈现数据特征

通过该案例可掌握数据从获取到分析的核心技能,为更复杂的数据分析项目奠定基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93009.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业分享丨SimSolid 在汽车零部件开发中应用的可行性调研及实践

*本文源自汽车行业用户范会超投稿1、背景车型短周期开发背景下,高效的仿真技术显得尤为重要。Altair 推出了多款加速设计/仿真的软件,其中无网格软件 SimSolid 与业务有一定的契合度,有必要论证其在汽车零部件结构分析领域的可行性。2、目标评…

MacOS字体看起来比在 Windows 上更好?

字体控们注意啦!🎉你们有没有发现,同样一段文字,在Mac和Windows上看起来就是不一样?Mac上的字仿佛自带柔光滤镜,圆润又舒适;而Windows上的字则像是精心雕琢的刀锋,锐利且清晰。这背后…

Torch -- 卷积学习day1 -- 卷积层,池化层

目录 一、CNN概述 二、卷积层 1、卷积核 2、卷积计算 3、边缘填充 4、步长 5、多通道卷积计算 6、多卷积核卷积计算 7、特征图大小 8、卷积参数共享 9、局部特征提取 10、卷积层API 三、池化层 1、池化层概述 1.池化层的作用 2.池化层类型 2、池化层计算 3、步…

蓝桥杯---第六届省赛单片机组真题

先出手写的代码&#xff0c;代码分析还需要一段时间&#xff0c;不难&#xff0c;大家认真写。#include <STC15F2K60S2.H> #include "Seg.h" #include "LED.h" #include "Key.h" #include "DS1302.h" #include "DS18B20.h&…

GPT-5深度解析:精准、高效、务实的新一代AI引擎

&#x1f31f; GPT-5深度解析&#xff1a;精准、高效、务实的新一代AI引擎在万众瞩目中&#xff0c;OpenAI于2025年8月7日正式推出GPT-5——这一代模型没有华丽的创意革命&#xff0c;却以惊人的准确率提升、断崖式降价和强大的工程能力&#xff0c;悄然重塑了生成式AI的应用边…

oss(阿里云)前端直传

WEB端前端直传 参考文档&#xff1a;web前端直传并设置上传回调 封装oss-upload.ts // 图片上传 import { uploadToken } from /api/uploadFile.js // 获取oss token接口// 定义 OSS 信息类型 interface OssInfo {policy: string;signature: string;x_oss_credential: strin…

vscode uv 发布一个python包:编辑、调试与相对路径导包

背景 最近一直在使用uv做python包管理&#xff0c;用起来很方便。 尤其是在代码上传到github的时候&#xff0c;pyproject.toml 会显示出当前项目依赖的python包。这样在把代码下载到本地之后&#xff0c;直接uv sync就可以很方便地恢复出python环境。 uv 除了有上述优点&…

Secure 第四天作业

实验需求&#xff1a;需求一拓扑&#xff1a;按照以上拓扑所示&#xff0c;完成以下需求&#xff1a;参考以上拓扑&#xff0c;配置设备IP地址&#xff0c;使用UNL里Secure第四天拓扑即可。&#xff08;有兴趣的同学课后也可按照PPT原拓扑做做实验&#xff09;&#xff1b;配置…

利用开漏输出模式模拟IIC

/************************************************************利用IO口模拟IIC时序&#xff0c;需要使用2个IO口(SDA和SCL)SCL时钟线只能由主器件进行控制&#xff0c;所以SCL引脚必须为输出模式SDA数据线&#xff0c;在主器件发送数据时&#xff0c;SDA引脚为输出模式SDA数…

闸机控制系统从设计到实现全解析:第 5 篇:RabbitMQ 消息队列与闸机通信设计

第 5 篇&#xff1a;RabbitMQ 消息队列与闸机通信设计RabbitMQ 是一款开源的消息队列中间件&#xff08;Message Queue&#xff0c;MQ&#xff09;&#xff0c;基于 Erlang 语言开发&#xff0c;遵循 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队…

Linux 常用命令大全:覆盖日常 99% 操作需求

1、基本命令 pwd&#xff1a;显示当前工作目录的绝对路径&#xff0c;例如在复杂目录结构中快速确认位置&#xff0c;执行后会输出类似/home/user/documents的结果。 cd&#xff1a;切换目录&#xff0c;cd 目录路径可进入指定目录&#xff0c;cd ~回到当前用户的家目录&…

普通电脑与云电脑的区别有哪些?全面科普

近年来&#xff0c;越来越多的人不再购置升级自己的电脑&#xff0c;转而选择云电脑&#xff0c;云端产品正在变得越来越普及易用。那么它究竟跟我们的普通本地设备有什么区别呐&#xff1f;或许很多人并不知悉&#xff0c;对此&#xff0c;本篇内容小编就为大家简要科普一下普…

【Python】支持向量机SVM

示例代码&#xff1a;import numpy as np import matplotlib.pyplot as plt from sklearn import svm from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report# 设…

当AI学会“抄近路”:残差网络如何突破深度学习的极限

**——解读《Deep Residual Learning for Image Recognition》**今天我想带大家回到2015年&#xff0c;见证人工智能领域的一场“捷径革命”——由何恺明等人提出的**深度残差学习框架&#xff08;ResNet&#xff09;**。这篇论文解决了困扰AI界多年的“深度诅咒”&#xff0c;…

HCIP--BGP综合实验

目录 BGP综合实验报告 一、实验拓扑 二、实验要求 三、实验思路 &#xff08;一&#xff09;IP地址规划 &#xff08;二&#xff09;整体思路 四、实验步骤 &#xff08;一&#xff09; IP地址配置 &#xff08;二&#xff09; AS2内部配置OSPF协议 &#xff08;三&a…

Java 基础编程案例:从输入交互到逻辑处理

在Java编程学习中&#xff0c;输入输出、循环控制和逻辑判断是核心基础。本文整理了10个经典案例&#xff0c;涵盖Scanner输入处理、斐波那契数列、成绩统计、登录验证等场景&#xff0c;帮助初学者掌握编程逻辑与实用技巧。 一、Scanner输入交互&#xff1a;获取用户输入并处理…

LeetCode 面试经典 150_数组/字符串_整数转罗马数字(18_12_C++_中等)(模拟)(对各位进行拆解)

LeetCode 面试经典 150_数组/字符串_整数转罗马数字&#xff08;18_12_C_中等&#xff09;题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;模拟&#xff09;&#xff1a;思路二&#xff08;对各位进行拆解&#xff09;&a…

计算机网络摘星题库800题笔记 第6章 应用层

第6章 应用层 6.1 网络应用的架构 考点 1 CS 架构 题组闯关 1.DNS 是基于 ( ) 模式的分布式系统。 A. C/S B. B/S C. P2P D. 以上均不正确 1.【参考答案】A 【解析】本题考查网络应用模型。 DNS 作为分布式应用&#xff0c;是一种典型的 C/S 模式&#xff0c;是随着 Internet 技…

BLUCK电路的输入电容应该怎么选取

借用TI的BULK芯片讨论一下输入电容怎么选取的问题&#xff0c;BULK电源是我们常用的电源&#xff0c;它的原理请看之前的文章&#xff1a; 高压差为何不用LDO&#xff1f;DCDC效率更高&#xff01;-CSDN博客 本文我们探讨一下输入电容&#xff0c;输入电容是控制纹波的关键&a…

CAN仲裁机制的原理

我们来详细讲 CAN 仲裁机制 的原理和工作方式,这是 CAN 总线最核心的特性之一。 1️⃣ 基本概念 CAN 总线是 多主机、多节点的串行总线,所有节点共享一根差分信号线(CAN_H / CAN_L)。 每个节点都可以随时发送消息(多主机机制) 总线只能同时有一个节点成功发送 仲裁 用…