爬虫:中国大学排行榜

这篇具有很好参考价值的文章主要介绍了爬虫:中国大学排行榜。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        访问网址https://www.shanghairanking.cn/rankings,爬取排行榜数据,分析按区域的大学数量排行,得出有效结论。

  1. 爬取主榜数据并保存在文件中。
  2. 分析每个地区上榜大学的数量,保存在文件中。
  3. 分析前十名的地区的大学数量,绘制柱状图。

(4)说明爬虫爬取过程中可能涉及到的社会、健康、安全、法律以及文化问题,并并评价和说明分析结果对于社会、健康、安全、法律以及文化的影响,符合道德和社会公共利益,理解应承担的责任。

使用 requests 库进行爬取

import requests
from bs4 import BeautifulSoup

# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    # 发送HTTP GET请求获取网页内容
    url = "https://www.shanghairanking.cn/rankings/bcur/202311"
    response = requests.get(url)

    # 解析HTML内容
    soup = BeautifulSoup(response.text, "html.parser")

    # 找到包含大学排行的表格
    table = soup.find("table", class_="rk-table")

    # 提取表格中的数据
    data = []

    # 表头
    headers = table.find("thead").find_all("tr")

    # 表格
    tbody = table.find("tbody")
    rows = tbody.find_all("tr")


    for row in rows:
        cols = row.find_all("td")
        data.append([col.text.strip() for col in cols])



    # 将数据保存到文件
    with open("./data/university_rankings.txt", "w", encoding="ISO-8859-1") as file:
        for entry in data:
            file.write(f"{entry[0]}\t{entry[1]}\n")

     但是此种爬取方式只能爬取第一页数据,比较受限。

        网页改版,导致无法爬取整个数据,可以使用Selenium[6]和Chrome WebDriver作为爬虫工具,可以模拟浏览器的行为,通过代码进行控制翻页,然后再进行爬取每一页的数据。然后将每一页的数据加入数组,最后读完后进行数据持久化,将数据存储到电脑中相应的文件中,使用csv格式进行保存。

import csv

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By


def getFirstText(list):
    try:
        return list[0].strip()
    except:
        return ""


def getData(browser, data):
    try:
        for i in range(1, 31):
            tr = browser.find_element(By.XPATH, '//*[@id="content-box"]/div[2]/table/tbody/tr[' + i.__str__() + ']')
            id = tr.find_element(By.XPATH, './td[1]/div').text
            name = tr.find_element(By.XPATH, './td[2]/div/div[2]/div[1]/div/div/a').text
            province = tr.find_element(By.XPATH, './td[3]').text
            type = tr.find_element(By.XPATH, './td[4]').text
            score = tr.find_element(By.XPATH, './td[5]').text
            data.append([id, name, province, type, score])
    except:
        print("不够30条了")

    return data


def writeData(data):
    # 打开文件,选择写入模式('w')
    with open('../reptile/data/ranking.csv', 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['排名', '大学名称', '省份', '类型', '分数'])
        writer.writerows(data)
    print("文件写入成功")


def main():
    # url地址
    url = 'https://www.shanghairanking.cn/rankings/bcur/202311'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.37'
    }

    # 定义chrome驱动去地址
    path = Service('chromedriver.exe')
    data = []

    # 创建浏览器操作对象
    browser = webdriver.Chrome(service=path)
    browser.get(url=url)
    for i in range(1, 21):
        # time.sleep(3)

        getData(browser, data)

        if i in [1, 2, 3, 18, 19, 20]:
            alink = browser.find_element(By.XPATH,
                                         '/html/body/div/div/div/div[2]/div/div[3]/div[2]/div[1]/div/ul/li[9]/a')
        elif i in [4, 17]:
            alink = browser.find_element(By.XPATH,
                                         '/html/body/div/div/div/div[2]/div/div[3]/div[2]/div[1]/div/ul/li[10]/a')
        else:
            alink = browser.find_element(By.XPATH,
                                         '/html/body/div/div/div/div[2]/div/div[3]/div[2]/div[1]/div/ul/li[11]/a')

        alink.click()
        print("第", i, '页已经读取完成')

    writeData(data)


if __name__ == '__main__':
    main()

(2)分析每个地区上榜大学的数量,保存在文件中。

# (2)分析每个地区上榜大学的数量,保存在文件中。
import pandas as pd

# 分地区进行排序
df = pd.read_csv("../reptile/data/ranking.csv", encoding='gbk')

# 分组统计
data = pd.DataFrame(pd.value_counts(df['省份']))

# 建立新索引
data = data.reset_index(drop=False)
data.index = data.index + 1

# 生成dataframe对象
names = ['省份', '数量']
data.columns = names

# 保存文件
data.to_csv("../reptile/data/GroupStatistics.csv", encoding='gbk')

(3)分析前十名的地区的大学数量,绘制柱状图。

# (3)分析前十名的地区的大学数量,绘制柱状图。
import pandas as pd
import matplotlib.pyplot as plt

# 分地区进行排序
df = pd.read_csv("../reptile/data/ranking.csv", encoding='gbk')

# 计数并按数量降序排序
top_10 = df['省份'].value_counts().head(10)

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为SimHei

# 绘制柱状图
plt.bar(top_10.index, top_10.values)

# 设置图形标题和坐标轴标签
plt.title("Top 10 Regions with Most Universities")
plt.xlabel("Region")
plt.ylabel("Number of Universities")

# 旋转地区标签,以防止重叠
plt.xticks(rotation=45)

# 显示图形
plt.show()

(3)分析前十名的地区的大学数量,绘制柱状图。文章来源地址https://www.toymoban.com/news/detail-798380.html

# (3)分析前十名的地区的大学数量,绘制柱状图。
import pandas as pd
import matplotlib.pyplot as plt

# 分地区进行排序
df = pd.read_csv("../reptile/data/ranking.csv", encoding='gbk')

# 计数并按数量降序排序
top_10 = df['省份'].value_counts().head(10)

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为SimHei

# 设置字体

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为SimHei

# 绘制圆饼图
plt.pie(top_10.values, labels=top_10.index, autopct='%1.1f%%')

# 添加标题
plt.title('前10名省份大学占比')

# 显示图形
plt.show()

到了这里,关于爬虫:中国大学排行榜的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微博排行榜:获取微博用户和话题排行榜API接口

    随着社交媒体的快速发展,微博已成为了人们获取信息的重要途径。而在微博中,用户和话题的排行榜更是引起了人们的广泛关注。那么如何获取微博用户和话题排行榜呢?下面介绍一下基于微博排行榜API接口的方法。     一、获取微博用户排行榜API接口 微博用户排行榜A

    2024年02月05日
    浏览(47)
  • 【lettuce-排行榜】

    背景: 这次游戏中台采用lettuce的zset完成游戏内的本服和跨服排行榜,因此写一下案例。 pom.xml RedisManager.java RankManager.java RankItem.java RankInfo.java Main.java redis中查看下

    2024年01月21日
    浏览(42)
  • 采购管理系统排行榜

    在这个数字化改变业务的年代,有哪些采购管理系统居于排行榜单的前列呢?作为一个自诩对该行业了如执掌的软件行业人员,给各位分享分享采购管理系统排行榜。 1、甄云数字化采购管理平台 国内做的一流的采购管理软件,算是行业内的老大哥,功能全面,也比较实用。

    2024年02月04日
    浏览(28)
  • 全球热门 AI 排行榜出炉!

    以下文章来源于无敌信息差 ,作者无敌 刚刚过去的 2023 年,可以说是 AI 元年。 随着技术的飞速发展,AI 行业在这一年再次迎来了爆炸式的增长。 近日,Writerbuddy 研究了  3000 多个 AI  的数据,出具了一份行业报告:该报告细致地盘点了 全球 50 大热门 AI 工具。 让无敌来带

    2024年02月22日
    浏览(39)
  • 开放 LLM 排行榜: 深入研究 DROP

    最近,开放 LLM 排行榜 迎来了 3 个新成员: Winogrande、GSM8k 以及 DROP,它们都使用了 EleutherAI Harness 的原始实现。一眼望去,我们就会发现 DROP 的分数有点古怪: 绝大多数模型的 F1 分数都低于 10 分 (满分 100 分)!我们对此进行了深入调查以一探究竟,请随我们一起踏上发现之旅吧

    2024年01月16日
    浏览(32)
  • unity微信小游戏——排行榜

    设置时记住排行榜唯一标识 此处建议使用官方案例的UI进行修改 minigame-unity-webgl-transform: Unity WebGL 微信小游戏适配方案 (gitee.com) DemoRanking这个项目就是 1.新建Canvas 此处要选择Overlay 否则排行榜会无法拖动 此处RankingBox默认状态为SetActive(false) bg:排行榜背景 也可以把背景让在

    2024年02月02日
    浏览(43)
  • 【面试题】微博、百度等大厂的排行榜如何实现?

    现如今每个互联网平台都会提供一个排行版的功能,供人们预览最新最有热度的一些消息,比如百度: 再比如微博: 我们要知道,这些互联网平台每天产生的数据是非常大,如果我们使用MySQL的话,db实现小时、天、周、月的排行榜,难度及其大,而且表结构的设计也非常难

    2024年04月10日
    浏览(38)
  • 排序7-2 奥运排行榜 PTA 数据结构

    7-2 奥运排行榜 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同。比如中国金牌总数列第一的时候,中国媒体就公布“金牌榜”;而美国的奖牌总数第一,于是美国媒体就

    2024年02月02日
    浏览(35)
  • Redis 实现用户积分和积分排行榜微服务优化

    在之前的博客中我通过 MySQL数据库实现了积分和积分排行榜功能,在数据量大和并发量高的情况下会有以下缺点: SQL编写复杂; 数据量大,执行统计SQL慢; 高并发下会拖累其他业务表的操作,导致系统变慢; 使用 Sorted Sets 保存用户的积分总数,因为 Sorted Sets 有 score 属性,

    2024年02月03日
    浏览(34)
  • SRM的主要功能是什么?国内SRM主流排行榜

    SRM的主要功能是什么?国内SRM主流排行榜 现在国内很多中大型企业都在用SRM来优化企业采购业务,作为SRM行业从业者,我今天和大家聊聊主流SRM的功能,以及国内做SRM比较好的服务商,给大家参考。 SRM的主流功能,主要包括以下6点: 1、优化供应商的管理 供应商管理是企业

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包