首页 > 其他分享 >软科高校数据获取

软科高校数据获取

时间:2023-06-10 23:57:36浏览次数:34  
标签:高校 driver 获取 college import div data find 软科

软科高校数据获取

主要获取页面五个字段;分别是:校名、地区、管理部门、类别、双一流

在这里有一个坑就是后续的一些院校在类别和双一流这个标签上面都没有这个值,所以使用try...except...来进行判断的话会很慢很慢,如果有解决问题的小伙伴欢迎留言一起探讨解决方案!

这个项目采用的是Selenium自动翻页获取数据,软科这个网站的所有数据都在一个JSON文件里面,但是在抓包的时候会发现有个参数是随机变化的,除非弄明白这个参数是如何生成的否则很难获取到,直接上代码(ps:真的很慢!!!)

import csv
import time
import pandas as pd
from selenium import webdriver
from selenium.common import NoSuchElementException
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://www.shanghairanking.cn/institution")
# 等待浏览器加载渲染页面
driver.implicitly_wait(2)
# 下拉页面到底部
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight'
driver.execute_script(js)
college_header = ['校名', '地区', '管理部门', '类别', '双一流']


def get_college_data():
    college_data = []
    divs = driver.find_elements(By.CSS_SELECTOR, ".univ-main")
    for div in divs:
        # 校名
        college_name = div.find_element(By.XPATH, "./div/div[2]/div[1]/span").text
        # 地区
        college_area = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[1]").text
        # 管理部门
        college_section = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[2]").text
        # 类别
        try:
            college_category = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[3]").text
        except NoSuchElementException:
            college_category = "Null"
        # 双一流
        try:
            college_grade = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[4]").text
        except NoSuchElementException:
            college_grade = "Null"
        college_data.append([
            college_name,
            college_area,
            college_section,
            college_category,
            college_grade
        ])
    college_data = pd.DataFrame(columns=college_header, data=college_data)
    return college_data


college_datas = []
for page in range(1,10):
    time.sleep(1)
    print(f"正在获取{page}页!")
    data = get_college_data()
    college_datas.append(data)
    driver.find_element(By.CLASS_NAME, "ant-pagination-next").click()

csv_file = pd.concat(college_datas, ignore_index=True)
csv_file.to_csv('college_data.csv', mode='w', index=False, sep=',')

标签:高校,driver,获取,college,import,div,data,find,软科
From: https://www.cnblogs.com/yujie168/p/17472216.html

相关文章

  • 江苏省2023年普通高校招生全国统一考试游记
    前言好久没写博客了呢,这一个月一来也发生了很多事吧不过因为我的偷懒,很多有趣的事情都没有记录下来然后游记也不是考完就写的,也算是一个回忆吧Day1其实一开始我对自己的要求也不高,把试卷填满就行所以说上考场之前应该还算比较轻松吧然后第一天老师们送考的服装是红色的代......
  • 「AntV」路网数据获取与L7可视化
    1.引言L7地理空间数据可视分析引擎是一种基于WebGL技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用。L7引擎支持多种数据源和数据格式,包括GeoJSON、CSV等,可以快速加载和渲染大规模地理空间数据。L7引擎还提供了丰富的可视化效果和交互功能,包括热力图......
  • 中国红 实验七 综合软件项目案例 简单高校学生管理软件
    实验七:综合软件项目案例简单高校学生管理软件项目内容班级博客链接2023春软件工程2020级计算机科学与技术本次作业要求链接实验七:综合软件项目案例团队名称中国红团队的课程学习目标完成综合软件项目案例,总结软件开发相关经验这个作业在哪些方面帮助团......
  • 获取微信小程序源码
    获取微信小程序源码的三种方法:一、使用adb连接手机获取小程序源码1、手机root环境下开启调试模式,手机通过USB数据线连接电脑查看设备adb.exedevices连接设备adb.execonnect10.10.10.1//ip为手机IP2、手机未root环境下adbusbadbdevicesadbtcpip8888//设置端口号888......
  • 使用Python获取Excel文件中单元格公式的计算结果
    假设有如下Excel文件,其中第二个WorkSheet中数据如下:其中D列为公式,现在要求输出该列公式计算的数值结果,代码如下:代码运行结果:......
  • Nginx 获取与传递真实访问IP
    1.环境首先,我这里的环境为nginx-1.1.2.2,通过yum安装。如果想要源码安装,需要通过如下参数,启用ngx_http_realip_module模块。--with-http_realip_module而传递真实IP到后端,需要使用到ngx_http_proxy_module模块,此模块默认会编译。对于Nginx的安装和添加nginx模块等,有问题可参考......
  • 获取网站元数据(标题、描述内容、图标)
    做个网站导航链接的小项目,每次输入网址、标题等一系列信息很麻烦。所以想通过只输入网址自动获取相关内容。问题描述通过输入一个网址,点击按钮后获取该网站的标题、描述内容和图标等信息。最开始打算用vue前端实现功能,但是由于浏览器的同源策略限制,前端无法直接从其他网站获......
  • Python爬取并简单分析2024年普通高校招生专业(专业类)选考科目要求
    任务描述:使用Python语言编写网络爬虫程序,采集山东省考试院发布的2024年普通高校招生专业(专业类)选考科目要求,然后统计不同要求的本科专业数量和专科专业数量。网页源代码分析与爬虫程序原理请参考:Python爬取2021年拟在山东招生普通高校专业(类)选考科目要求Python采集全国高校2020年拟......
  • Quizlet Plus 获取
    QuizletPlus获取基本流程:申请一个临时邮箱去注册,然后邀请一个新人(也是临时邮箱),这样原来的邮箱就会变成30天高级账号(注意所有的注册都应该勾选"Iamateacher"!)(1)注册临时邮箱打开浏览器搜索tempmail(或直接点击链接......
  • 给第一行单元格赋值 + WPS JS获取工作表的总行数 + WPS JS获取工作表的总行数
    戳我,了解更多相关办公的小技巧给第一行单元格赋值1、在计算机中有一种ASCII编码,其中A在计算机中的表示的数字是65,a的ascii码是97,b的ascii码是98。2、从A1到F1可以看到第一个字母在变化,第2个数字始终是1,A的ascii码是65,F的ascii码是70。3、我们定义letter=65,使letter逐渐靠......