爬蟲與數據分析結合案例:中國大學排名爬取與分析全流程

爬蟲與數據分析結合案例:中國大學排名爬取與分析全流程

一、案例背景與目標

本案例以高三網中國大學排名(網址: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
英文地址,請注明出處:http://en.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)。 每個節點都可以隨時發送消息(多主機機制) 總線只能同時有一個節點成功發送 仲裁 用…