翼度科技»论坛 编程开发 python 查看内容

软科高校数据获取

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
软科高校数据获取主要获取页面五个字段;分别是:校名、地区、管理部门、类别、双一流
在这里有一个坑就是后续的一些院校在类别和双一流这个标签上面都没有这个值,所以使用try...except...来进行判断的话会很慢很慢,如果有解决问题的小伙伴欢迎留言一起探讨解决方案!
这个项目采用的是Selenium自动翻页获取数据,软科这个网站的所有数据都在一个JSON文件里面,但是在抓包的时候会发现有个参数是随机变化的,除非弄明白这个参数是如何生成的否则很难获取到,直接上代码(ps:真的很慢!!!)
  1. import csv
  2. import time
  3. import pandas as pd
  4. from selenium import webdriver
  5. from selenium.common import NoSuchElementException
  6. from selenium.webdriver.common.by import By
  7. driver = webdriver.Chrome()
  8. driver.get("http://www.shanghairanking.cn/institution")
  9. # 等待浏览器加载渲染页面
  10. driver.implicitly_wait(2)
  11. # 下拉页面到底部
  12. js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight'
  13. driver.execute_script(js)
  14. college_header = ['校名', '地区', '管理部门', '类别', '双一流']
  15. def get_college_data():
  16.     college_data = []
  17.     divs = driver.find_elements(By.CSS_SELECTOR, ".univ-main")
  18.     for div in divs:
  19.         # 校名
  20.         college_name = div.find_element(By.XPATH, "./div/div[2]/div[1]/span").text
  21.         # 地区
  22.         college_area = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[1]").text
  23.         # 管理部门
  24.         college_section = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[2]").text
  25.         # 类别
  26.         try:
  27.             college_category = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[3]").text
  28.         except NoSuchElementException:
  29.             college_category = "Null"
  30.         # 双一流
  31.         try:
  32.             college_grade = div.find_element(By.XPATH, "./div/div[2]/div[3]/span[4]").text
  33.         except NoSuchElementException:
  34.             college_grade = "Null"
  35.         college_data.append([
  36.             college_name,
  37.             college_area,
  38.             college_section,
  39.             college_category,
  40.             college_grade
  41.         ])
  42.     college_data = pd.DataFrame(columns=college_header, data=college_data)
  43.     return college_data
  44. college_datas = []
  45. for page in range(1,10):
  46.     time.sleep(1)
  47.     print(f"正在获取{page}页!")
  48.     data = get_college_data()
  49.     college_datas.append(data)
  50.     driver.find_element(By.CLASS_NAME, "ant-pagination-next").click()
  51. csv_file = pd.concat(college_datas, ignore_index=True)
  52. 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】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具