You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用rvest将层级网页数据抓取为表格格式?

解决层级数据抓取的长度不匹配问题

问题出在你分别抓取了所有部门和所有管理员,没有建立部门与对应管理员的关联。正确的做法是逐个处理每个部门的容器区块,在每个区块内同时提取部门名称和该部门下的所有管理员,这样就能保证两者的对应关系。

以下是修正后的代码:

library(rvest)
library(dplyr)
library(purrr)

page <- read_html("https://postdocs.stanford.edu/about/department-postdoc-admins")

# 遍历每个部门区块,同步提取部门和对应管理员
admin_data <- page %>%
  html_elements(".item-list") %>%
  map_dfr(function(block) {
    # 提取当前区块的部门名称
    dept <- block %>% html_element("h3") %>% html_text2()
    # 提取当前区块下的所有管理员姓名
    admins <- block %>% html_elements("li h4") %>% html_text2()
    
    # 处理无管理员的部门(保留部门行,管理员字段设为NA)
    if (length(admins) == 0) {
      tibble(department = dept, admin_name = NA_character_)
    } else {
      tibble(department = dept, admin_name = admins)
    }
  })

# 查看结果示例
head(admin_data)

代码逻辑说明

  1. 先抓取页面中所有.item-list区块,每个区块对应一个部门的完整信息
  2. 使用map_dfr遍历每个区块:
    • 在当前区块内提取部门名称
    • 在当前区块内提取所有属于该部门的管理员姓名
    • 将部门名称与管理员姓名配对,每个管理员对应一行相同的部门名称
  3. map_dfr自动将所有区块的结果合并为一个整洁的tibble,最终数据行数等于管理员总数(含无管理员的部门行)

内容的提问来源于stack exchange,提问作者a.sa.5969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:47:18