当前位置:   article > 正文

python爬虫+pygal交互式可视化爬取大学QS排名_python获取qs排名前100的高校名单

python获取qs排名前100的高校名单

目录

前言

一、用到的python库

二、准备工作

1.找个有近几年QS排名的网站

2.找到数据

3.分析json结构

三、编写代码

四、结果呈现

总结


前言

不久后要做大学宣讲,顺便捡一下爬虫的语法,就写了这个爬虫的代码。记录一下免得以后又忘了。


一、用到的python库

requests(爬虫基本库)

re(正则表达式库,在本文中也可用内置的find方法代替)

pygal(交互式画图库)

以上库均可用"pip install name"(name即上述库的名称)安装

如果用的是anaconda环境管理,将pip改为conda

二、准备工作

1.找个有近几年QS排名的网站

我这里找的是QS在中国的官网:世界大学排名 | QSChina(但说实话数据有点少,只有4年的)

2.找到数据

通过检查找到网络后点击完整榜单,捕获数据。

找一下后发现数据在这个网址中,复制URL。(还有要加上自己浏览器的User-Agent进行伪装)

注意:这里请求的方法是GET但爬虫时用requests.get()方法会报错,应该用requests.post()。

3.分析json结构

​​​​​​​

打红框的就是我们要的目标数据,其中uni除了学校名是中文,其余均英文字符。

所以可以用re的语法提取出来:

reg=re.compile('[\u4E00-\u9FA5]+')

这个是匹配中文字符的表达式。

(但因为有的学校的名称是以英文或其他语言呈现的,所以最好爬取海外知名院校和中国院校)

三、编写代码

  1. # This is a py file to crawl the ranks of your university in QS.
  2. import requests
  3. import re
  4. import pygal
  5. def getJson(url):
  6. r=requests.post(url,headers=headers).json()
  7. return r
  8. def parse(dict):
  9. D={}
  10. reg=re.compile('[\u4E00-\u9FA5]+')
  11. # This line is to find the Chinese characters, so the university's name should be in Chinese, then you can get the QS rank of it.
  12. for d in dict['data']:
  13. try:
  14. name=re.search(reg,d['uni']).group()
  15. # If the uni name is in English, it will return None. Use the group() to None will get an error.
  16. if name in uName:
  17. D[name]=[int(d['overall_rank'])]
  18. if len(D)==len(uName):
  19. break
  20. except:
  21. pass
  22. return D
  23. def getuName():
  24. s=input("请将你想查的大学名称用中文输入(中间用‘,’隔开):")
  25. #, is the comma in Chinese
  26. L=s.split('')
  27. return L
  28. def darwLine():
  29. line=pygal.Line()
  30. for i in uName:
  31. line.add(i,dataDict[i])
  32. line.x_labels=year
  33. line.y_title="QS排名"
  34. line.x_title="年份"
  35. line.title="近四年QS排名"
  36. line.legend_at_bottom=True
  37. line.render_to_file('learning scrapy\\crawl the ranks of QS\\查询结果.svg')
  38. # Before you run this file, you should change the above line to your path.
  39. def main():
  40. global uName
  41. uName=getuName()
  42. for i in range(3,-1,-1):
  43. if i==3:
  44. global dataDict
  45. dataDict=parse(getJson(url[i]))
  46. else:
  47. D=parse(getJson(url[i]))
  48. for name in uName:
  49. dataDict[name].append(D[name][0])
  50. darwLine()
  51. if __name__ == '__main__':
  52. url=['https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/2122636_indicators.txt',
  53. 'https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/2057712_indicators.txt',
  54. 'https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/914824_indicators.txt',
  55. 'https://www.qschina.cn/sites/default/files/qs-rankings-data/cn/397863_indicators.txt']
  56. headers={
  57. 'user-agent': you need to add it
  58. }
  59. year=[2019,2020,2021,2022]
  60. main()

四、结果呈现

最后将svg文件在浏览器中打开。

中国顶尖学府:

还有在武汉备受争议的华科武大之争:

(QS排名不完全代表教学水平高低,仅作参考)


总结

本文介绍了排名类爬虫流程,并附上了查询近四年QS排名的代码,欢迎大家在评论区交流。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/798181
推荐阅读
相关标签
  

闽ICP备14008679号