QS世界大学排名有两个官方的网站,一个是国际网站,另一个是国内网站,上面的数据应该都是一样的,只是一个是英文,一个是中文。

综合排名

  qsChina,也就是国内网站上的QS排名数据获取相对比较方便,因为它可以选择每页显示所有数据,而国际网站上的那个则每页最多100条数据。虽然有这样的问题,但我最后还是选择国际网站上的数据,因为有些大学的中文翻译很奇怪。
  我主要采用的还是selenium,这个虽然很慢,但是比较稳定。

#encoding=utf-8
from selenium.webdriver  import Edge
from selenium.webdriver.common.by import By
import time
import xlsxwriterWorkbook = xlsxwriter.Workbook("QSRank2022.xlsx")
Sheet = Workbook.add_worksheet()
driver = Edge()Sheet.write(0, 0, 'Rank')
Sheet.write(0, 1, 'University')
Sheet.write(0, 2, 'Location')
Sheet.write(0, 3, 'Overall Score')
Sheet.write(0, 4, 'International Students Ratio')
Sheet.write(0, 5, 'International Faculty Ratio')
Sheet.write(0, 6, 'Faculty Student Ratio')
Sheet.write(0, 7, 'Citations per Faculty')
Sheet.write(0, 8, 'Academic Reputation')
Sheet.write(0, 9, 'Employer Reputation')curl = 'https://www.topuniversities.com/university-rankings/world-university-rankings/2022'
driver.get(curl)
time.sleep(1)currentRow = 1
for j in range(13):#13 pagefor i in range(1, 103, 1):subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(i)+']')attr = subItem.get_attribute('customblock')#exclude adif not attr:subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(i)+']/div/div/div/div[1]/div/div/div/div/div[1]')Sheet.write(currentRow, 0, subItem.text)subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(i)+']/div/div/div/div[1]/div/div/div/div/div[2]/div/div[1]')Sheet.write(currentRow, 1, subItem.text)subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(i)+']/div/div/div/div[1]/div/div/div/div/div[2]/div/div[2]')Sheet.write(currentRow, 2, subItem.text)for k in range(3,10,1):subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(i)+']/div/div/div/div[2]/div/div/div/div['+str(k-2)+']')Sheet.write(currentRow, k, subItem.text)currentRow = currentRow + 1print(str(currentRow) + ' finished!') # change to next pageif j < 12:q = 3while True:try:nextPage = driver.find_element(By.XPATH, '//*[@id="alt-style-pagination"]/li['+str(q)+']/a')except:q = q + 1continueattr = nextPage.get_attribute('class')if attr == 'page-link next':breakq = q + 1driver.execute_script('arguments[0].click();', nextPage)time.sleep(1)print('chaneg to page ' + str(j+2))Workbook.close()
driver.close()

  上面的代码用于获取综合排名。当时主要遇到了这样一些问题:

  1. selenium打开网页自动跳转到qsChina
  2. 网页中的几个条目之间有广告
  3. 翻页的按键位置会变化

  问题解决:

  1. 在selenium打开网页后打断点,就是在driver.get(curl)之后暂停,然后手动在网页中输入国际网站的网址。
  2. 广告的条目有属性customblock=“true”,用get_attribute的方法获取这个属性进行判断,正常的条目没有这个属性,应该是None
  3. 翻页的按键也有一个属性class=“page-link next”,根据这一点也可以找到翻页的位置,然后用js脚本模拟点击

学科排名

  总共有56个学科排名,5个是"BROAD SUBJECT AREA",还有51个是"SPECIFIC SUBJECT",下面是代码的实现。每次启动的时候都需要在浏览器打开网页之后手动重新输入网页地址,不然会跳转到qsChina的网页
  打开网页后先要选Subject,也是利用selenium执行js脚本的方式模拟浏览器点击。先打开下拉框,再选择相应的Subject,然后根据选择的Subject创建Excel表格。接着在网页下方可以获取这个Subject的条目数量。然后切换到具体的指标页面,改变每页显示的条目数量(尽可能大,可以少翻页)。再之后就可以跟综合排名一样获取具体的数据了。每遍历一页之后要翻页。

#encoding=utf-8
from selenium.webdriver  import Edge
from selenium.webdriver.common.by import By
import time
import xlsxwriter
import mathdriver = Edge()
curl = 'https://www.topuniversities.com/university-rankings/university-subject-rankings/2021/arts-humanities'
driver.get(curl)
time.sleep(1)for i in range(1, 59, 1):# skip the border. "1" for "BROAD SUBJECT AREA"; "7" for "SPECIFIC SUBJECT"if i == 1 or i == 7:continue#change subjectSubjectSel = driver.find_element(By.XPATH, '//*[@id="ranking-fillters"]/div[7]/div/div')driver.execute_script('arguments[0].click();', SubjectSel)time.sleep(1)Subject = driver.find_element(By.XPATH, '//*[@id="ranking-fillters"]/div[7]/div/div/div[2]/div['+str(i)+']')SubjectName = Subject.textdriver.execute_script('arguments[0].click();', Subject)print('Select Subject: '+SubjectName)time.sleep(1)# create sheetWorkbook = xlsxwriter.Workbook(SubjectName+'.xlsx')Sheet = Workbook.add_worksheet()# get item total numberitemNumber = driver.find_element(By.XPATH, '//*[@id="_totalcountresults"]')itemNum = int(itemNumber.text)print('Total Item count in ' + SubjectName + ': ' + itemNumber.text)# change tab to rank indexrankInd = driver.find_element(By.XPATH, '//*[@id="block-tu-d8-content"]/div/article/div/div[3]/div/div[1]/div/div[1]/div/div/ul/li[2]/a')driver.execute_script('arguments[0].click();', rankInd)time.sleep(1)print('Change tab to Ranking Indicators')# change items number in every pagedropdown = driver.find_element(By.XPATH, '//*[@id="block-tu-d8-content"]/div/article/div/div[3]/div/div[1]/div/div[3]/div[4]/div[1]/div[2]/i')driver.execute_script('arguments[0].click();', dropdown)time.sleep(1)itemsPerPage = driver.find_element(By.XPATH, '//*[@id="block-tu-d8-content"]/div/article/div/div[3]/div/div[1]/div/div[3]/div[4]/div[1]/div[2]/div[2]/div[4]')driver.execute_script('arguments[0].click();', itemsPerPage)time.sleep(1)print('Now there are 100 items in every page')#initial the table headSheet.write(0, 0, 'Rank')Sheet.write(0, 1, 'University')Sheet.write(0, 2, 'Location')Sheet.write(0, 3, 'Overall Score')Sheet.write(0, 4, 'H-index Citations')Sheet.write(0, 5, 'Citations per Paper')Sheet.write(0, 6, 'Academic Reputation')Sheet.write(0, 7, 'Employer Reputation')CycleCnt = int(math.ceil(itemNum/100))currentRow = 1for j in range(CycleCnt):k = 1while True:try:eachItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(k)+']')except:breakattr = eachItem.get_attribute('customblock')#exclude adtime.sleep(0.5)if not attr:subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(k)+']/div/div/div/div[1]/div/div/div/div/div[1]/div')Sheet.write(currentRow, 0, subItem.text)subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(k)+']/div/div/div/div[1]/div/div/div/div/div[2]/div/div[1]/div')Sheet.write(currentRow, 1, subItem.text)subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(k)+']/div/div/div/div[1]/div/div/div/div/div[2]/div/div[2]')Sheet.write(currentRow, 2, subItem.text)for q in range(3,8,1):subItem = driver.find_element(By.XPATH, '//*[@id="ranking-data-load_ind"]/div['+str(k)+']/div/div/div/div[2]/div/div/div/div['+str(q-2)+']')Sheet.write(currentRow, q, subItem.text)print(str(currentRow)+ '/' + str(itemNum) + ' finished!')currentRow = currentRow + 1k = k + 1# next pageif j < CycleCnt-1:q = 3while True:try:nextPage = driver.find_element(By.XPATH, '//*[@id="alt-style-pagination"]/li['+str(q)+']/a')except:q = q + 1continueattr = nextPage.get_attribute('class')if attr == 'page-link next':breakq = q + 1driver.execute_script('arguments[0].click();', nextPage)time.sleep(1)print('chaneg to page ' + str(j+2))print('finish ' + SubjectName)Workbook.close()
driver.close()

QS世界大学综合排名与学科排名数据获取相关推荐

  1. QS世界大学 计算机科学与信息系统学科排名!中国高校表现如何?

    部分内容来源于青塔网,topuniversities.com QS世界大学排名(QS World University Rankings)是由英国教育组织Quacquarelli Symonds所发表 ...

  2. 使用selenium爬取QS世界大学综合排名与学科排名数据

    一.概述: 总共有56个学科排名,5个是"BROAD SUBJECT AREA",还有51个是"SPECIFIC SUBJECT",下面是代码的实现.每次启动的 ...

  3. 有python专业的世界大学_大数据时代专业怎么选?2018年QS世界大学商业分析硕士专业排名...

    导读:最新2018年QS世界大学商业分析硕士专业排名对全球各所大学商业分析专业做出综合评价,最终45所大学上榜. 商业分析专业Business Analysis到底学哪些科目?就业方向如何?作为商科专 ...

  4. 计算机科学与信息系统专业世界大学排名,2018年QS世界大学计算机科学与信息系统专业排名TOP25...

    2018年QS世界大学排名出炉了,计算机科学与信息系统专业的学生对于这类大学比较感兴趣,下面的文章或许会给您一点帮助.出国人士可以密切关注或者点击收藏资讯,和出国留学网一起来看看2018年QS世界大学 ...

  5. 2017-2018年QS世界大学计算机科学及信息系统专业排名

    https://www.topuniversities.com/university-rankings/university-subject-rankings/2018/computer-scienc ...

  6. 伦敦大学学院计算机科学世界排名,伦敦大学学院世界排名及专业排名汇总(QS世界大学排名版)...

    [伦敦大学学院]2022年QS世界大学综合排名第8名 [伦敦大学学院]2021年QS世界大学综合排名第10名 [伦敦大学学院]2020年QS世界大学综合排名第8名 [伦敦大学学院]2019年QS世界大 ...

  7. 新南威尔士大学计算机排名,新南威尔士大学世界排名及专业排名汇总(QS世界大学排名版)...

    [新南威尔士大学]2022年QS世界大学综合排名第43名 [新南威尔士大学]2021年QS世界大学综合排名第44名 [新南威尔士大学]2020年QS世界大学综合排名第43名 [新南威尔士大学]2019 ...

  8. 爱丁堡计算机专业硕士世界排名,爱丁堡大学世界排名及专业排名汇总(QS世界大学排名版)...

    [爱丁堡大学]2022年QS世界大学综合排名第16名 [爱丁堡大学]2021年QS世界大学综合排名第20名 [爱丁堡大学]2020年QS世界大学综合排名第20名 [爱丁堡大学]2019年QS世界大学综 ...

  9. 墨尔本大学计算机科学世界排名,墨尔本大学世界排名及专业排名汇总(QS世界大学排名版)...

    [墨尔本大学]2022年QS世界大学综合排名第37名 [墨尔本大学]2021年QS世界大学综合排名第41名 [墨尔本大学]2020年QS世界大学综合排名第38名 [墨尔本大学]2019年QS世界大学综 ...

最新文章

  1. Android 活动与活动间数据传递--登录注册页面
  2. java中索引超出怎么办_Java-字符串索引超出范围异常“字符串索引超出范围”
  3. python初心记录二
  4. onSaveInstanceState与onRestoreInstanceState何时调用、如何使用
  5. java static 可见性_中级Java应该清楚的概念:原子性、可见性、有序性是什么?...
  6. 多品类适合电商美工收藏|品质页面PSD模板
  7. PyTorch 深度学习:33分钟快速入门——VGG
  8. 如何退出python程序_python怎么退出程序
  9. Enterprise Library 中加密数据库连接字符串
  10. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建
  11. 2019年通信工程考研初试经验帖(366分)
  12. codecombat极客战记森林61-70通关代码
  13. CREO导出CAD比例不对-解决方法
  14. html鼠标放上虚化背景图片,如何将网页CSS背景图高斯模糊且全屏显示
  15. 枚举Word表格AutoFormat样式
  16. 【VisionMaster】卡尺工具
  17. 最近超火的太空人动态壁纸,手机也能使用!
  18. RN - iOS端后台挂起后30s重启问题处理过程与心得
  19. 可以挂靠的工程类证书汇总2014年
  20. 采集百度图片不显示 怎么办

热门文章

  1. 机器学习和大数之间有什么区别?
  2. 翻译 CRUSH: Controlled, Scalable,Decentralized Placement of Replicated Data
  3. Ceph学习之Crush算法—— Bucket
  4. ASP.NET站点使用IP或域名访问的connectionStrings配置方法
  5. 基于annotation方式的通用报文处理框架
  6. 张小娴爱情经典语句摘录
  7. 在信用中国网站爬取你想要查找的任何公司的所有相关信息
  8. 包装行业智慧供应链系统:加快产业周转效率,改善业务处理流程
  9. oracle 时间 转 日期,oracle中如何将日期转成时间戳
  10. node-little-db小型本地json文件数据库