2024年中国大学排名数据爬取与分析(一)

项目背景

随着教育信息化的发展,各大高校的排名成为学生和家长选择学校的重要参考依据。上海软科发布的《中国最好大学排名》(Best Chinese Universities Ranking)是国内外广泛认可的权威排名之一。本项目旨在通过网络爬虫技术,从上海软科官方网站上爬取2024年中国大学排名的数据,并进行简单的数据处理和分析,最终将结果保存为Excel文件,以便于进一步研究和使用。

项目目标

  1. 数据获取:使用 requests 库发送HTTP请求,获取上海软科2024年中国大学排名的网页内容。
  2. 数据解析:利用 BeautifulSoup 库解析HTML文档,提取排名、学校名称和总分等关键信息。
  3. 数据处理:将提取的数据存储在列表中,并使用 pandas 库创建DataFrame对象,便于后续的数据处理和分析。
  4. 数据输出:将处理后的数据保存为Excel文件,方便用户查看和使用。

技术栈

  • Python:编程语言
  • requests:用于发送HTTP请求,获取网页内容
  • BeautifulSoup:用于解析HTML和XML文档
  • pandas:用于数据处理和分析
  • Excel:数据存储格式

主要功能

  1. getHTMLText:发送HTTP请求,获取指定URL的网页内容。
  2. fillUnivList:解析HTML文档,提取排名、学校名称和总分等信息,并将其存储在列表中。
  3. printUnivList:打印前N条排名数据,方便用户查看。
  4. saveToExcel:将提取的数据保存为Excel/CSV文件。

项目结构

# 导入模块
# requests:用于发送HTTP请求,获取网页内容
import requests
# BeautifulSoup:用于解析HTML和XML文档
from bs4 import BeautifulSoup
# bs4:用于处理HTML和XML文档,BeautifulSoup的别名,方便使用
import bs4
# pandas:用于数据处理和数据分析
import pandas as pd

# 定义getHTMLText函数
def getHTMLText(url):
    # try...except:用于捕获并处理请求过程中可能出现的异常
    try:
        # 发送GET请求,获取网页内容,设置超时时间为30秒
        r = requests.get(url,timeout=30)
        # 如果请求失败(HTTP状态码不是200),抛出异常
        r.raise_for_status()
        # 设置响应内容编码,确保正确解码
        r.encoding = r.apparent_encoding
        # 返回网页内容
        return r.text
    # except Exception as e:捕获所有异常,并打印错误信息,返回空字符串
    except Exception as e:
        print(f"Error fetching {url}:{e}")
        return ""
    
# 定义fillUnivList函数
def fillUnivList(ulist,html):
    # 创建BeautifulSoup对象,解析HTML文档
    soup = BeautifulSoup(html,"html.parser")
    # 查找<tbody>标签
    tbody = soup.find('tbody')
    # 如果没有<tbody>标签,打印提示信息并返回
    if tbody is None:
        print("No <tbody> found in the page.没有发现<tbody>标签。")
        return
    # 遍历所有<tr>标签
    for tr in tbody.find_all('tr'):
        # 检查是否为标签对象
        if isinstance(tr,bs4.element.Tag):
            # 查找<tr>标签中所有<td>标签
            tds = tr.find_all('td')
            # 确保有足够的<td>标签
            if len(tds) >= 6:
                # 提取第一个<td>标签中的排名数据,并去除前后空白
                # .strip():用于去除字符串前后空白(包括空格、制表符、换行符等)
                rank = tds[0].string.strip() if tds[0].string else ''
                # 查找第二个<td>标签中的<span>标签
                name_span = tds[1].find('span')
                # 提取<span>标签中的学校名称数据,并去除前后空白
                name = name_span.string.strip() if name_span else ''
                # 提取第五个<td>标签中的总分数据,并去除前后空白
                # 假设总分是在第五个<td>标签中的值
                score = tds[4].string.strip() if tds[4].string else ''
                # 将数据添加到ulist列表中
                ulist.append([rank,name,score])
                
# 定义printUnivList函数
def printUnivList(ulist,num):
    # 打印表头
    """
    {:^10}\t{:^6}\t{:^10}:是一种结合了对齐方式和制表符的格式化方式;
    : :分隔符,表示开始格式化;
    ^ :对齐方式,表示居中对齐;
    10 :字段宽度,表示该字段占用10个字符的宽度;
    """ 
    print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
    # 遍历ulist列表的前num个元素
    for i in range(min(num,len(ulist))):
        # 获取当前行数据
        u = ulist[i]
        # 打印当前行数据
        print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
        # 打印成功打印的记录数
        print("成功打印了" + str(min(num,len(ulist))) + "条记录")                 
    
# 定义saveToExcel函数/saveToCSV函数
def saveToExcel(ulist,filename):
    # 创建DataFrame对象,并将ulist列表作为数据
    df = pd.DataFrame(ulist,columns=["排名","学校名称","总分"])
    # 保存DataFrame对象到Excel文件/CSV文件,需设置UTF-8编码以支持中文(encoding = 'utf-8')
    df.to_excel(filename,index=False)
    # 打印保存成功信息
    print(f"数据已保存到{filename}")
    
# 定义主函数
def main():
    # 创建ulist空列表,用于存储数据
    ulist = []
    # 设置目标URL
    url = "https://www.shanghairanking.cn/rankings/bcur/2024"
    # 调用getHTMLText函数获取网页内容
    html = getHTMLText(url)
    # 如果获取失败,打印错误信息并返回
    if not html:
        print("Failed to retrieve the webpage content.检索网页内容失败。")
        return
    # 调用fillUnivList函数,填充ulist列表
    fillUnivList(ulist,html)
    # 调用printUnivList函数,打印ulist列表的前30个元素
    printUnivList(ulist,30)
    # 定义保存路径,..._2024.xlsx/csv/txt
    save_path = "D:/360/university_ranking_2024.xlsx"
    # 调用saveToExcel函数/saveToCSV函数/saveToTXT函数,将ulist列表保存到Excel文件/CSV文件
    saveToExcel(ulist,save_path)
# 调用主函数,执行程序
main()

使用说明

  1. 环境准备:确保已安装Python及其相关库(requests, beautifulsoup4, pandas)。
  2. 运行脚本:直接运行 main() 函数即可启动数据爬取和处理流程。
  3. 查看结果:爬取的数据将被保存到指定路径的CSV文件中,路径可以在 save_path 变量中进行配置。

作者注:本人自学Python爬虫的项目练习,分享一下,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值