欧洲议会网站MEP信息爬取求助:将行存储数据转为列结构
问题:将欧洲议会议员信息从多行文本转为三列结构
我正在爬取欧洲议会议员(MEP)的信息,通过CSS类.sln-additional-info获取到了每位议员的党派、所属国家等信息。目前用以下R代码获取到的文本,每个议员对应三行内容,现在需要把这些内容转换成三列的结构化数据:
url <- "https://www.europarl.europa.eu/meps/it/full-list/all" html <- read_html(url) info_html <- html_elements(html,".sln-additional-info") info <- html_text(info_html)
解决方案
直接对获取到的多行文本做分割和结构化处理即可,代码如下:
library(rvest) library(tibble) library(stringr) # 原有爬取代码 url <- "https://www.europarl.europa.eu/meps/it/full-list/all" html <- read_html(url) info_html <- html_elements(html,".sln-additional-info") info <- html_text(info_html) # 拆分每行文本并清理空白内容 split_info <- str_split(info, "\\n", simplify = TRUE) %>% apply(1, function(x) str_squish(x[x != ""])) %>% do.call(rbind, .) # 转换为带列名的数据框 mep_info <- as_tibble(split_info) %>% rename( 议员姓名 = V1, 所属党派 = V2, 所属国家 = V3 ) # 查看前几行结果 head(mep_info)
代码说明
str_split(info, "\\n", simplify = TRUE):把每个议员的多行文本按换行符拆分成矩阵格式;apply(1, function(x) str_squish(x[x != ""])):遍历每一行,过滤掉空行,同时清理文本前后的空格和中间的多余空格;do.call(rbind, .):把处理后的列表转换成统一的矩阵,方便转成数据框;- 最后用
rename给列命名,你可以根据实际爬取的文本内容调整列名(比如如果第一行不是姓名,就改成对应的内容)。
内容的提问来源于stack exchange,提问作者salvo
相关产品推荐
相关产品推荐

