軟科高校數據獲取 主要獲取頁面五個欄位;分別是:校名、地區、管理部門、類別、雙一流 在這裡有一個坑就是後續的一些院校在類別和雙一流這個標簽上面都沒有這個值,所以使用try...except...來進行判斷的話會很慢很慢,如果有解決問題的小伙伴歡迎留言一起探討解決方案! 這個項目採用的是Seleniu ...
主要獲取頁面五個欄位;分別是:校名、地區、管理部門、類別、雙一流
在這裡有一個坑就是後續的一些院校在類別和雙一流這個標簽上面都沒有這個值,所以使用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=',')