当前位置:   article > 正文

Python 爬取世界大学排行 正则匹配 全部年份_尝试使用正则表达技术式获取排名前10的大学信息

尝试使用正则表达技术式获取排名前10的大学信息

  1. import re #正则表达式 匹配
  2. import requests
  3. import csv
  4. import os
  5. def get_text(year):
  6. url = "https://www.shanghairanking.cn/_nuxt/static/1647508426/rankings/arwu/{}/payload.js".format(year)
  7. print(url)
  8. headers = {
  9. 'Referer': 'https://www.shanghairanking.cn/rankings/arwu/{}'.format(year),
  10. 'User-Agent': 'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/93.0.4577.63Safari/537.36Edg/93.0.961.38'
  11. }#防反爬虫
  12. response = requests.get(url, headers=headers)#向网站发起请求,并获取响应对象参数
  13. return response.text
  14. def get_dict_value(key):
  15. try:
  16. result = dict_value[key].replace('"', "")
  17. except:
  18. result = key.replace('"', "")
  19. return result
  20. def printUnivList(ulist, year):
  21. os.mkdir('./{}'.format(year))#创建目录对应一个年份
  22. f = open('./{}/{}.csv'.format(year, year), 'w', encoding='utf-8', newline="")
  23. csv_writer = csv.writer(f)
  24. csv_writer.writerow(["排名", "学校名称", "国家", "国家排名", "总分", "校友排名"])#表头
  25. csv_writer.writerows(ulist)#多行写入列表
  26. f.close()
  27. for year in range(2003, 2022):#循环从2003至2022年
  28. res_str = get_text(str(year))#获得对应年份的源代码,str(year)将其作为字符串
  29. repx = re.compile(r'univNameCn:"(.*?)",univUp.*?region:(.*?),regionRanking:(.*?),score:(.*?),indData:{"\d+?":(.*?),"')
  30. hash_str = repx.findall(res_str, re.S)#re.s可匹配换号符
  31. #正则表达式匹配对应数据compile()与findall()一起使用,返回一个列表
  32. parameter = re.findall(r'}\((.*?)\)\)\);', res_str)[0].replace('"', "").split(',')
  33. #replace去掉字符串,split用,分隔成列表
  34. parameter_name = re.findall(r'\(function\((.*?)\){', res_str)[0].split(",")
  35. dict_value = dict(zip(parameter_name, parameter))
  36. #将parameter_name, parameter合并
  37. res_list = []
  38. for j in range(len(hash_str)):
  39. i = hash_str[j]
  40. rank = j + 1 # 排名
  41. name = i[0] # 校名
  42. country = get_dict_value(i[1]) # 国家
  43. regional_ranking = get_dict_value(i[2]) # 地区排名
  44. score = get_dict_value(i[3]) # 成绩
  45. alumni_award = get_dict_value(i[4]) # 校友获奖
  46. res_list.append([rank, name, country, regional_ranking, score, alumni_award])
  47. #将一所大学全部数据放入`一个列表里
  48. printUnivList(res_list, year)

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号