帅哥总管 发表于 2023-6-10 23:05:59

软科高校数据获取

软科高校数据获取主要获取页面五个字段;分别是:校名、地区、管理部门、类别、双一流
在这里有一个坑就是后续的一些院校在类别和双一流这个标签上面都没有这个值,所以使用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/div/span").text
      # 地区
      college_area = div.find_element(By.XPATH, "./div/div/div/span").text
      # 管理部门
      college_section = div.find_element(By.XPATH, "./div/div/div/span").text
      # 类别
      try:
            college_category = div.find_element(By.XPATH, "./div/div/div/span").text
      except NoSuchElementException:
            college_category = "Null"
      # 双一流
      try:
            college_grade = div.find_element(By.XPATH, "./div/div/div/span").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=',')
来源:https://www.cnblogs.com/yujie168/p/17472216.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 软科高校数据获取