栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021软科中国大学排名(Python抓取前200名)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021软科中国大学排名(Python抓取前200名)

2021软科中国大学排名(Python抓取)

  由于软科官网使用动态渲染技术,将数据封装在js文件中,导致无法直接抓取所有的排名记录。用普通的请求方式只能抓取到前30条记录。虽然也可以通过自动化测试工具selenium模拟浏览器行为把数据提取出来,但毕竟繁琐。本文通过拿到网页js文件,然后通过正则表达式提取出排名信息的方式,将所有大学排名抓取出来。具体步骤如下:
  (1)右键点击检查(Chrome),来到控制面板,点击network,找到payload.js,双击找到请求头headers,便可以找到请求地址(Request URL)。

  (2)取出Request URL地址开始编码获取,得到的结果并存入Excel中如下:

具体代码为:

import requests
import re
import pandas as pd

#请求目标链接中请求数据
def get_data(url):
    try:
        response = requests.get(url)#因Url为一个js文件,故不必加headers等参数
        data = str(response.text)#将获取的数据转换为字符串
        return data
    except:
        print('加载数据失败')

#提取关键信息
def parse_data(data):
    name = (re.findall('univNameCn:"(.*?)".*?', str(data), re.S))#利用正则表达式提取需要的文本
    score = (re.findall('score:(.*?),.*?', str(data), re.S))
    result = []
    for i in range(len(name)):#将获取的数据合并
        result.append([i+1,name[i],score[i]])
    return result

#输出结果
def print_data(detail,num):#num表示需要输出的结果数
    tplt = "{0:^10}t{1:^10}t{2:^10}"
    print(tplt.format('排名', '学校名', '得分'))
    for item in range(num):
        temp =detail[item]
        print(tplt.format(temp[0],temp[1],temp[2]))

#将获取的结果保存到Excel中
def save_excel(detail,columns):
    file = pd.Dataframe(detail,columns=columns)
    file.to_excel('软科中国大学排名.xlsx',index=False)


def main():
    url = 'https://www.shanghairanking.cn/_nuxt/static/1632381606/rankings/bcur/2021/payload.js'
    columns = ['排名','学校名称','软科总得分']
    row_data = get_data(url)
    rank = parse_data(row_data)
    print_data(rank,200)#输出前200条数据
    save_excel(rank,columns)

if __name__=="__main__":
    main()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号