使用R语言rvest包爬取泰晤士高等教育影响力排名表格并规整为Tidy格式
泰晤士高等教育影响力排名爬取与规整方案
问题根源
你的代码仅提取了页面容器的纯文本,未定位到核心的排名表格节点,且该页面表格依赖动态渲染,静态爬取需精准定位表格元素并做后续规整。
静态爬取修正代码
library(tidyverse) library(rvest) library(janitor) # 目标页面 link <- "https://www.timeshighereducation.com/impactrankings" # 读取页面并提取表格 webpage <- read_html(link) rank_table <- webpage %>% # 定位排名表格(浏览器开发者工具可确认此选择器) html_element("#ranking-table") %>% html_table(fill = TRUE) %>% clean_names() # 标准化列名 # 规整为目标格式 tidy_rank_data <- rank_table %>% transmute( rank = rank, university_name = university, sdg_goal_1 = sdg_1_no_poverty, sdg_goal_2 = sdg_2_zero_hunger, sdg_goal_3 = sdg_3_good_health_and_well_being, sdg_goal_4 = sdg_4_quality_education, overall_score = overall, country = location ) # 查看结果 head(tidy_rank_data)
核心注意事项
- 选择器校准:若页面结构更新,需在浏览器F12开发者工具中重新获取表格的CSS选择器(替换
#ranking-table)。 - 并列排名处理:排名列可能出现
1=这类并列标记,如需转为数值,可执行mutate(rank = str_remove(rank, "=") %>% as.numeric())。 - 多页数据爬取:静态爬取仅能获取第一页数据,如需全量数据,可分析分页URL的
page参数规律,循环遍历所有分页链接。
动态渲染页面适配方案
若静态爬取无法获取完整表格(页面依赖JS加载数据),使用RSelenium模拟浏览器:
library(RSelenium) # 启动Chrome驱动(需提前安装对应版本的chromedriver) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问页面并等待加载 remDr$navigate(link) Sys.sleep(5) # 等待时间可根据网络情况调整 # 提取页面源码并处理 page_source <- remDr$getPageSource()[[1]] webpage_dynamic <- read_html(page_source) rank_table_dynamic <- webpage_dynamic %>% html_element("#ranking-table") %>% html_table(fill = TRUE) %>% clean_names() # 规整数据(同静态爬取的transmute步骤) tidy_rank_data_dynamic <- rank_table_dynamic %>% transmute( rank = rank, university_name = university, sdg_goal_1 = sdg_1_no_poverty, sdg_goal_2 = sdg_2_zero_hunger, sdg_goal_3 = sdg_3_good_health_and_well_being, sdg_goal_4 = sdg_4_quality_education, overall_score = overall, country = location ) # 关闭驱动 remDr$close() driver$server$stop()
内容的提问来源于stack exchange,提问作者user22863964
相关产品推荐
相关产品推荐

