
本文介绍使用 r 语言(rvest)高效爬取欧洲议会官网议员名单,精准提取党团、国家及所属政党三类信息,并通过矩阵重塑实现自动列对齐与数据框构建。
在实际数据采集任务中,从欧洲议会官网(https://www.php.cn/link/6a51a5ddd3a3e143a1e186948d00b602 HTML 布局,其中议员姓名通常位于
以下为完整、可复现的 R 爬虫流程(需提前安装 rvest 和 dplyr):
library(rvest)
library(dplyr)
url <- "https://www.europarl.europa.eu/meps/it/full-list/all"
html <- read_html(url)
# 提取议员姓名(每名议员对应一个标题元素)
names <- html %>%
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 应用,真正实现“一次采集、多维复用”。










