如何从欧洲议会官网批量抓取议员信息并结构化为表格

6次阅读

如何从欧洲议会官网批量抓取议员信息并结构化为表格

本文介绍使用 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 应用,真正实现“一次采集、多维复用”。

text=ZqhQzanResources