使用rvest抓取维基百科时str_replace_all()导致艺术家重复计数问题
解决维基百科抓取后艺术家名称重复统计问题
问题场景
用rvest抓取西语维基百科格莱美最佳说唱专辑奖页面,移除艺术家名称里的维基百科引用标记([xxx])后,统计出现次数时,Eminem被计为3个不同条目、Kanye West被计为2个不同条目,无法得到准确统计结果。
问题原因
- 仅移除括号内容后,字符串残留多余空格(括号前后的空格未清理,出现
"Eminem "、" Eminem"这类格式差异); - 部分艺术家存在别名差异(比如Kanye West以"Ye"名义的条目未统一)。
修复代码
library(tidyverse) library(rvest) # 抓取页面并提取表格 pagina <- read_html("https://es.wikipedia.org/wiki/Anexo:Premio_Grammy_al_mejor_%C3%A1lbum_de_rap") %>% html_nodes(css = "table") %>% html_table() # 处理表格数据 rap <- pagina[[2]] %>% select(-5) %>% # 删除第5列 mutate( # 移除维基百科引用标记([xxx]格式) Artista = str_replace_all(Artista, '\\[[^\\]]*\\]', ''), # 清理所有多余空格(前后空格、中间多空格) Artista = str_squish(Artista), # 统一艺术家别名(可根据实际情况补充更多映射) Artista = case_when( Artista == "Ye" ~ "Kanye West", TRUE ~ Artista ) ) # 查看修正后的统计结果 table(rap$Artista)
关键修复点
- 用
str_squish()自动清理字符串前后空格及中间连续多空格,确保同一名词格式完全一致; - 通过
case_when()手动映射艺术家别名,统一不同名义下的同一创作者条目。
内容的提问来源于stack exchange,提问作者Darwin Galvis
相关产品推荐
相关产品推荐

