
本文介绍使用 r 语言(rvest)高效爬取欧洲议会官网议员名单,精准提取党团、国家及所属政党三类信息,并通过矩阵重塑实现自动列对齐与数据框构建。
在实际数据采集任务中,从欧洲议会官网(https://www.php.cn/link/6a51a5ddd3a3e143a1e186948d00b602 html 布局,其中议员姓名通常位于
标签内,而附加信息(党团名称、国籍、国内政党)则统一包裹在
容器中,且严格按“党团|国籍|国内政党”三行顺序排列——这为后续结构化解析提供了可靠前提。
以下为完整、可复现的 R 爬虫流程(需提前安装 rvest 和 dplyr):
library(rvest) library(dplyr) url <- "https:>% html_elements("div.erpl_title-h4.t-item") %>% html_text(trim = TRUE) # 提取附加信息文本(返回长度为 3×N 的字符向量) info_raw <- html %>% html_elements(".sln-additional-info") %>% html_text(trim = TRUE) # 关键步骤:将扁平化文本向量重塑为 3 列矩阵(byrow = TRUE 保证按“党团|国家|政党”行序填充) info_matrix <- matrix(info_raw, ncol = 3, byrow = TRUE) colnames(info_matrix) <- c("Group", "Country", "National_Party") # 合并为数据框(推荐用 data.frame 而非 cbind,确保类型安全) df <- data.frame( Name = names, Group = info_matrix[, 1], Country = info_matrix[, 2], National_Party = info_matrix[, 3], stringsAsFactors = FALSE ) # 查看前6行结果 head(df)
⚠️ 注意事项与优化建议:
- 反爬提示:该网站未设强反爬机制,但建议添加 Sys.sleep(0.5) 在请求间作轻量延迟,避免高频访问;
- 容错处理:实际页面可能存在个别议员缺失某项信息(如独立议员无国内政党),此时 html_text() 可能返回空字符串,建议后续用 tidyr::replace_na() 或 dplyr::mutate(across(..., ~ifelse(. == "", NA_character_, .))) 清洗;
- 多语言适配:示例 URL 使用 /it/(意大利语),若需其他语言版本,请同步替换路径(如 /en/),并验证 css 选择器是否一致(多数语言版 dom 结构相同);
- 扩展性:如需补充议员个人主页链接,可额外提取 html_elements(".erpl_list-item a") %>% html_attr("href") 并与姓名一一匹配。
最终生成的 df 是标准的 tidy 数据框,可直接用于分析、导出(write.csv(df, "meps.csv", row.names = FALSE))或接入 Shiny 应用,真正实现“一次采集、多维复用”。