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

爬虫与数据分析结合案例学习总结

今天我学习的是爬虫与数据分析结合,还练习了以下案例

一、案例

本次案例以中国大学排名数据为研究对象,通过爬虫技术从高三网(网址:2021中国的大学排名一览表_高三网)爬取学校名称、总分、全国排名、星级排名、办学层级等信息,将数据保存为 CSV 文件后,进行数据预处理与可视化分析,完整展现了从数据获取到数据分析的全流程。

二、中国大学排名爬取实现

(一)任务分析

目标网页包含结构化的大学排名表格数据,通过分析网页 HTML 结构可知,数据存储在table>tbody>tr标签中,每个tr标签下的td标签分别对应名次、学校名称、总分等信息,可通过解析这些标签提取目标数据。

(二)代码实现

  1. 获取网页数据

python

运行

import requestsdef get_html(url, time=3):  # get请求通用函数try:r = requests.get(url, timeout=time)  # 发送请求r.encoding = r.apparent_encoding  # 设置返回内容的字符集编码r.raise_for_status()  # 返回的状态码不等于200抛出异常return r.text  # 返回网页的文本内容except Exception as error:print(error)

  1. 解析网页数据

python

运行

from bs4 import BeautifulSoupdef parser(html):  # 解析函数soup = BeautifulSoup(html, "lxml")  # html转换为soup对象out_list = []  # 解析函数输出数据的列表for row in soup.select("table>tbody>tr"):  # 循环遍历trtd_html = row.select("td")  # 获取tdrow_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

  1. 保存数据到 CSV

python

运行

import csvdef save_csv(item, path):  # 数据存储,将List数据写入文件with open(path, "wt", newline="", encoding="utf-8") as f:  # 创建utf8编码文件csv_write = csv.writer(f)  # 创建写入对象csv_write.writerows(item)  # 一次性写入多行if __name__ == "__main__":url = "http://www.bspider.top/gaosan/"html = get_html(url)  # 获取网页数据out_list = parser(html)  # 解析网页,输出列表数据save_csv(out_list, "school.csv")  # 数据存储

  1. 运行结果
    生成的school.csv文件包含爬取的大学数据,示例内容如下:

plaintext

学校名称,总分,全国排名,星级排名,办学层次
北京大学,100,1,8★,世界一流大学
清华大学,99.81,2,8★,世界一流大学
浙江大学,80.72,4,8★,世界一流大学
...

三、数据预处理

针对school.csv中 “总分” 列存在的空数据,使用 pandas 进行处理:

  1. 删除包含空字段的行

python

运行

import pandas as pd
df = pd.read_csv("school.csv")
new_df = df.dropna()
print(new_df.to_string())

  1. 用指定内容替换空字段

python

运行

import pandas as pd
df = pd.read_csv("school.csv")
df.fillna("暂无分数信息", inplace=True)
print(df.to_string())

  1. 用列的均值替换空单元格

python

运行

import pandas as pd
df = pd.read_csv("school.csv")
x = df["总分"].mean()
print("总分的均值为")
print(x)
df["总分"].fillna(x, inplace=True)
print(df.to_string())

  1. 用列的中位数替换空单元格

python

运行

import pandas as pd
df = pd.read_csv("school.csv")
x = df["总分"].median()
print("总分的中位数为")
print(x)
df["总分"].fillna(x, inplace=True)
print(df.to_string())

四、数据分析与可视化

(一)柱形图可视化不同星级学校数量

  1. 垂直柱形图

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = 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.show()

  1. 水平柱形图

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = 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.barh(x, y)
plt.show()

(二)饼图可视化不同星级学校占比

python

运行

import matplotlib.pyplot as plt
import numpy as np
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()

五、总结

今天的学习通过爬虫技术获取了中国大学排名数据,展示了从网页请求、数据解析到存储的完整爬虫流程;随后利用 pandas 进行数据预处理,解决了数据缺失问题;最后通过 matplotlib 绘制柱形图和饼图,直观呈现了不同星级学校的数量及占比分布。整个过程体现了爬虫技术在数据获取中的作用,以及数据分析与可视化在数据解读中的价值,为后续基于该数据的深入研究奠定了基础。

http://www.dtcms.com/a/326319.html

相关文章:

  • Note4:Self-Attention
  • AI Agent平台大PK:Dify与开源Coze的差异化对比分析
  • 机器学习-决策树(DecisionTree)
  • Hot100合集
  • 金蝶云星空 × SRM 深度集成实战(附完整接口清单)
  • 关于线性DP模板
  • 《汇编语言:基于X86处理器》第13章 高级语言接口(1)
  • [Ubuntu] xrdp共享连接 Ubuntu 屏幕 | xfce4
  • 建筑兔零基础python自学记录119|数据处理(4)-23
  • 需求列表如何做层级结构
  • Redis类型之Hash
  • 重学前端009 --- 响应式网页设计 CSS 伪选择器
  • 订单簿价格冲击模型与机器学习在大单策略中的融合
  • 元数据管理与数据治理平台:Apache Atlas 基本搜索 Basic Search
  • Apache Ignite分片线程池:高并发保序新方案
  • MCU 软件断点注意事项!!!
  • 【数据结构入门】树
  • 基于Go-Zero框架实现的小demo
  • 爬虫和数据分析相结合案例
  • 软件开发:一场精密的生命构建
  • 疯狂星期四文案网第36天运营日记
  • jsdiff + diff2html【jQuery】实现文件对比功能
  • Linux DNS服务解析原理与搭建
  • ResponseBodyAdvice是什么?
  • 基于动态顺序表实现【通讯录系统】:有文件操作部分哦!
  • Oracle主从incarnation不一致问题解决
  • ComfyUI安装
  • 【96页PPT】华为IPD流程管理详细版(附下载方式)
  • 强化学习常用数据集
  • HBase BlockCache:LRU Cache