当前位置: 首页 > news >正文

数据科学与计算:爬虫和数据分析案例笔记

案例 1:中国大学排名爬取与分析

一、任务描述

目标:爬取高三网中国大学排名一览表,提取学校名称、总分、全国排名、星级排名、办学层级等数据,并保存为 CSV 文件。

网址:2021中国的大学排名一览表_高三网

二、任务分析

数据来源:网页中的表格数据,包含 “名次”“学校名称”“总分”“全国排名”“星级排名”“办学层次” 等字段。

网页结构:数据嵌套在table > tbody > tr标签中,需通过解析 HTML 提取表格行数据。

三、代码实现

1. 核心库导入

python

运行

import requests  # 发送HTTP请求
from bs4 import BeautifulSoup  # 解析HTML
import csv  # 处理CSV文件
2. 功能函数

获取网页内容(get_html)

python

运行

def get_html(url, time=3):try:r = requests.get(url, timeout=time)  # 发送GET请求r.encoding = r.apparent_encoding  # 自动识别编码r.raise_for_status()  # 状态码非200时抛出异常return r.text  # 返回网页文本except Exception as error:print(error)
  • 解析网页数据(parser)

    python

    运行

    def parser(html):soup = BeautifulSoup(html, "lxml")  # 解析HTMLout_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
    
  • 保存为 CSV 文件(save_csv)

    python

    运行

    def save_csv(item, path):with open(path, "wt", newline="", encoding="utf-8") as f:csv_write = csv.writer(f)csv_write.writerows(item)  # 写入多行数据
    
3. 主程序

python

运行

if __name__ == "__main__":url = "http://www.bspider.top/gaosan/"html = get_html(url)  # 获取网页out_list = parser(html)  # 解析数据save_csv(out_list, "school.csv")  # 保存文件

四、数据预处理(处理缺失值)

针对 “总分” 列的空数据,使用 pandas 处理:

  1. 删除含空字段的行

    python

    运行

    import pandas as pd
    df = pd.read_csv("school.csv")
    new_df = df.dropna()  # 删除缺失值所在行
    print(new_df.to_string())
    
  2. 用指定内容替换空字段

    python

    运行

    df.fillna("暂无分数信息", inplace=True)  # 替换缺失值为指定文本
    
  3. 用均值替换空字段

    python

    运行

    x = df["总分"].mean()  # 计算均值
    df["总分"].fillna(x, inplace=True)  # 填充缺失值
    
  4. 用中位数替换空字段

    python

    运行

    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. 可视化图表

柱形图(横向 / 纵向)

python

运行

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()
  • 饼图(占比分布)

    python

    运行

    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. 案例完整展示了 “爬虫获取数据→预处理清洗→可视化分析” 的流程。
  2. 核心技术:requests 爬虫、BeautifulSoup 解析、pandas 数据处理、matplotlib 可视化。
  3. 应用场景:通过结构化数据提取与分析,直观呈现大学排名的分布特征。
http://www.dtcms.com/a/328284.html

相关文章:

  • 01数据结构-Kruskal算法
  • 破译真实感:渲染参数进阶指南——告别塑料感,唤醒材质生命力
  • 01. maven的下载与配置
  • ubuntu24下keychorn键盘连接不了的改建页面的问题修复
  • “生成式UI革命”:Tambo AI如何让你的应用“开口说话、动手搭界面” | 全面深剖、案例实践与未来展望
  • Seed-VC:零样本语音转换与扩散transformer
  • 08--深入解析C++ list:高效操作与实现原理
  • 从爬虫新手到DrissionPage实践者的技术旅程
  • 【IP查询】使用IP66(ip66.net)验证IP地址定位的准确率
  • 小智智能交互算法通过国家备案,视觉大模型引领AI应用新浪潮
  • 机器学习之TF-IDF文本关键词提取
  • 终端安全检测与防御技术
  • 数据结构:中缀到后缀的转换(Infix to Postfix Conversion)
  • 【速通版!语义通信基础与前沿学习计划】
  • C++中类之间的关系详解
  • AR巡检:三大核心技术保障数据准确性
  • Langchain入门:构建一个PDF摄取和问答系统
  • 51 单片机分层架构的模块依赖关系图
  • 解决ROS编译顺序不对,需要内部依赖,因此要多次编译的问题
  • Python初学者笔记第二十二期 -- (JSON数据解析)
  • MySQL 数据库表操作与查询实战案例
  • 双十一美妆数据分析:洞察消费趋势与行业秘密
  • 机械臂的智能升维:当传统机械臂遇见Deepoc具身智能大模型从自动化工具到具身智能体的范式革命
  • Element用法---Loading 加载
  • C++的异常的使用和规范
  • 【盘古100Pro+开发板实验例程】FPGA学习 | 均值滤波 | 图像实验指导手册
  • 【代码随想录day 18】 力扣 501.二叉搜索树中的众数
  • 免费播客翻译与转录:用中文收听全球播客
  • Langchain入门:文本摘要
  • C++学习之数据结构:AVL树