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

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

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

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

相关文章
接口数据多条件搜索(模糊查询)
接口数据多条件搜索(模糊查询)
235 0
|
6月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用问题之是否可以在筛选条件上增加筛选单行文本的内容
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
阿里云云效产品使用问题之是否可以在筛选条件上增加筛选单行文本的内容
|
7月前
|
SQL 前端开发 Java
实现数据的搜索( 筛选 )功能
实现数据的搜索( 筛选 )功能
|
7月前
|
缓存 索引
7.过滤查询
7.过滤查询
|
7月前
有关筛选条件的问题
有关筛选条件的问题
41 0
|
数据挖掘
基于R筛选过滤低丰度物种的几种方式
基于R筛选过滤低丰度物种的几种方式
454 0
|
移动开发 JavaScript 算法
如何实现动态内容条件筛选
这两天看了一下后端给的接口文档,每一个都要求筛选,而且这个筛选还是多条件的,还是不能固定的,要求根据用户的输入然后筛选,我之前的实现大概是这样子,当用户想要筛选的时候就去检索条件,并输入相关的内容进行筛选
odoo 为可编辑列表视图字段搜索添加查询过滤条件
odoo 为可编辑列表视图字段搜索添加查询过滤条件
206 0
关于 WhereElementIsNotElementType() 过滤的理解
关于 WhereElementIsNotElementType() 过滤的理解
关于 WhereElementIsNotElementType() 过滤的理解
|
Java
FilenameFilter 实现文件过滤
实现 FilenameFilter 接口的类的实例用于过滤文件名。这些实例被用来过滤类 File 的 list 方法中的目录列表。FilenameFilter 接口很简单,只有一个 accpet 方法
117 0