如何筛选和过滤ARWU网站上的大学排名数据

简介: ARWU网站(ShanghaiRanking's Academic Ranking of World Universities)是一个公认的全球大学排名的先驱和最值得信赖的大学排名之一。它每年发布世界前1000所研究型大学的排名,基于透明的方法论和客观的第三方数据。ARWU网站上的大学排名数据可以为高考考生、专业选择、就业指导、行业发展等提供有价值的参考信息。

亿牛云代理.jpeg

引言

ARWU网站(ShanghaiRanking's Academic Ranking of World Universities)是一个公认的全球大学排名的先驱和最值得信赖的大学排名之一。它每年发布世界前1000所研究型大学的排名,基于透明的方法论和客观的第三方数据。ARWU网站上的大学排名数据可以为高考考生、专业选择、就业指导、行业发展等提供有价值的参考信息。
然而,ARWU网站上的大学排名数据也存在一些问题,比如:

  • 数据量庞大,不易浏览和比较
  • 数据更新频率低,可能不反映最新的情况
  • 数据维度单一,可能不符合个人或特定领域的需求

因此,如何筛选和过滤ARWU网站上的大学排名数据,以获取更有针对性和实用性的信息,是一个值得探讨的技术问题。
本文将介绍一种使用Python编程语言和相关库来实现这一目标的方法,并给出相应的代码实现和中文解释。

正文

第一步:获取ARWU网站上的大学排名数据

要获取ARWU网站上的大学排名数据,我们需要使用Python的requests库来发送网络请求,并使用BeautifulSoup库来解析网页内容。为了避免被网站屏蔽或限制访问,我们还需要使用代理服务器来伪装我们的请求来源。具体代码如下:

# 导入requests库和BeautifulSoup库
import requests
from bs4 import BeautifulSoup

# 亿牛云代理 设置爬虫代理加强版  代理服务器
proxyHost = "www.16yun.cn"
proxyPort = "31111"

# 设置代理验证信息
proxyUser = "16YUN"
proxyPass = "16IP"

# 构造代理字典
proxies = {
   
   
    "http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",
    "https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}

# 设置请求头,模拟浏览器访问
headers = {
   
   
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
}

# 设置请求URL,这里以2021年世界大学学术排名为例
url = "https://www.shanghairanking.com/rankings/arwu/2021"

# 发送GET请求,并获取响应内容
response = requests.get(url, headers=headers, proxies=proxies)

# 判断响应状态码是否为200,即成功
if response.status_code == 200:
    # 使用BeautifulSoup解析响应内容,并指定解析器为lxml
    soup = BeautifulSoup(response.text, "lxml")
else:
    # 打印错误信息
    print(f"请求失败,状态码为{response.status_code}")

第二步:提取ARWU网站上的大学排名数据

要提取ARWU网站上的大学排名数据,我们需要使用BeautifulSoup库提供的方法来定位和获取网页中的目标元素。在这里,我们主要关注以下几个数据维度:

  • 世界排名(world_rank)
  • 学校名称(institution)
  • 国家/地区(country)
  • 总分(total_score)
  • 毕业生获奖(alumni)
  • 教职工获奖(award)
  • 高被引学者(hici)
  • 自然科学与工程论文(ns)
  • 社会科学论文(pub)
  • 期刊论文影响因子(pcp)

具体代码如下:

# 创建一个空列表,用于存储提取的数据
data = []

# 使用find_all方法,根据标签名和类名,找到所有包含大学排名数据的表格行元素
rows = soup.find_all("tr", class_="bgfd")

# 遍历每一行元素
for row in rows:
    # 创建一个空字典,用于存储当前行的数据
    item = {
   
   }
    # 使用find_all方法,找到所有包含数据的单元格元素
    cells = row.find_all("td")
    # 判断单元格元素的数量是否为10,即是否完整
    if len(cells) == 10:
        # 分别提取每个单元格元素中的文本内容,并去除空白字符
        item["world_rank"] = cells[0].get_text().strip()
        item["institution"] = cells[1].get_text().strip()
        item["country"] = cells[2].get_text().strip()
        item["total_score"] = cells[3].get_text().strip()
        item["alumni"] = cells[4].get_text().strip()
        item["award"] = cells[5].get_text().strip()
        item["hici"] = cells[6].get_text().strip()
        item["ns"] = cells[7].get_text().strip()
        item["pub"] = cells[8].get_text().strip()
        item["pcp"] = cells[9].get_text().strip()
        # 将当前行的数据字典添加到数据列表中
        data.append(item)
    else:
        # 打印错误信息
        print(f"数据不完整,跳过该行")

# 打印提取的数据列表的长度,即大学的数量
print(f"提取了{len(data)}所大学的排名数据")

第三步:筛选和过滤ARWU网站上的大学排名数据

要筛选和过滤ARWU网站上的大学排名数据,我们需要使用Python的pandas库来对提取的数据进行处理和分析。pandas库是一个强大的数据分析工具,可以方便地对表格型数据进行各种操作,比如排序、筛选、分组、聚合、可视化等。具体代码如下:

# 导入pandas库
import pandas as pd

# 将提取的数据列表转换为pandas的DataFrame对象,方便处理和分析
df = pd.DataFrame(data)

# 打印DataFrame对象的基本信息,包括列名、数据类型、非空值数量等
print(df.info())

# 打印DataFrame对象的前五行,查看数据内容
print(df.head())

# 对DataFrame对象进行筛选和过滤,根据不同的需求,可以使用不同的条件和方法
# 例如,筛选出总分在50分以上的大学,并按总分降序排序
df1 = df[df["total_score"].astype(float) > 50].sort_values(by="total_score", ascending=False)

# 打印筛选后的DataFrame对象的长度,即大学的数量
print(f"筛选出{len(df1)}所总分在50分以上的大学")

# 打印筛选后的DataFrame对象的前五行,查看数据内容
print(df1.head())

# 例如,筛选出国家/地区为中国或中国香港或中国台湾的大学,并按世界排名升序排序
df2 = df[df["country"].isin(["China", "China-Hong Kong", "China-Taiwan"])].sort_values(by="world_rank")

# 打印筛选后的DataFrame对象的长度,即大学的数量
print(f"筛选出{len(df2)}所国家/地区为中国或中国香港或中国台湾的大学")

# 打印筛选后的DataFrame对象的前五行,查看数据内容
print(df2.head())

# 例如,筛选出社会科学论文在20分以上的大学,并按社会科学论文降序排序
df3 = df[df["pub"].astype(float) > 20].sort_values(by="pub", ascending=False)

# 打印筛选后的DataFrame对象的长度,即大学的数量
print(f"筛选出{len(df3)}所社会科学论文在20分以上的大学")

# 打印筛选后的DataFrame对象的前五行,查看数据内容
print(df3.head())

结论

本文介绍了一种使用Python编程语言和相关库来筛选和过滤ARWU网站上的大学排名数据的方法,并给出了相应的代码实现和中文解释。该方法可以帮助我们获取更有针对性和实用性的信息,为高考考生、专业选择、就业指导、行业发展等提供有价值的参考。当然,该方法也有一些局限性,比如:

  • 依赖于ARWU网站的数据质量和更新频率
  • 需要根据不同的需求和场景,调整筛选和过滤的条件和方法
  • 可能存在一些技术上的难点和挑战,比如网络请求的稳定性、网页内容的变化、数据类型的转换等

因此,我们还可以进一步优化和完善该方法,比如:

  • 使用其他来源或渠道来获取或补充大学排名数据
  • 使用更灵活和智能的方式来动态生成筛选和过滤的条件和方法
  • 使用更健壮和高效的技术来处理网络请求、网页解析、数据处理等

希望本文能够对你有所帮助,谢谢阅读。

相关文章
|
2月前
|
人工智能 Python
条件过滤检索
向量检索服务DashVector支持条件过滤和向量相似性检索相结合,在精确满足过滤条件的前提下进行高效的向量检索。
|
4月前
有关筛选条件的问题
有关筛选条件的问题
22 0
|
10月前
|
数据挖掘
基于R筛选过滤低丰度物种的几种方式
基于R筛选过滤低丰度物种的几种方式
260 0
odoo 为可编辑列表视图字段搜索添加查询过滤条件
odoo 为可编辑列表视图字段搜索添加查询过滤条件
163 0
|
Java
FilenameFilter 实现文件过滤
实现 FilenameFilter 接口的类的实例用于过滤文件名。这些实例被用来过滤类 File 的 list 方法中的目录列表。FilenameFilter 接口很简单,只有一个 accpet 方法
90 0
“关联表单”组件文本数据筛选只支持包含条件的解决方案
在“关联表单”中使用数据筛选功能筛选文本时条件只有”包含“,此文章通过增加一个”下拉单选“组件,变相解决这个问题。
151 0
|
移动开发 JavaScript 算法
如何实现动态内容条件筛选
这两天看了一下后端给的接口文档,每一个都要求筛选,而且这个筛选还是多条件的,还是不能固定的,要求根据用户的输入然后筛选,我之前的实现大概是这样子,当用户想要筛选的时候就去检索条件,并输入相关的内容进行筛选
|
消息中间件 数据采集 分布式计算
数据预处理-数据推送-过滤纯查询数据|学习笔记
快速学习数据预处理-数据推送-过滤纯查询数据
94 0
数据预处理-数据推送-过滤纯查询数据|学习笔记
|
Python
一日一技:如何对数据进行过滤
一日一技:如何对数据进行过滤
338 0
一日一技:如何对数据进行过滤