R语言抓取含合并行网页表格:拆分换行分隔的列数据
问题解决:拆分Spotify艺术家列表中的合并单元格数据
问题背景
抓取Spotify新闻页的新兴艺术家表格时,遇到两个核心问题:
- 第一列(国家/地区)对应第二列多个艺术家(单元格跨多行合并)
- 第二列的多个艺术家以换行符
\n合并在单个单元格内
需要将第二列的艺术家拆分到独立行,每行匹配所属的国家/地区。
当前抓取代码:
library(rvest) # Spotify全球新兴艺术家列表 upcoming_artists_url <- "https://newsroom.spotify.com/2020-03-09/36-new-artists-around-the-world-that-are-on-spotifys-radar/" upcoming_artists <- read_html(upcoming_artists_url) upcoming_artists_table <- html_table(upcoming_artists)[[1]]
错误数据框示例(简化版):
structure(list( X1 = c("Spain", "France", "Japan\n*RADAR locally titled Early Noise"), X2 = c("DORA \nAleesha\nMaría José Llergo\nGuitarricadelafuente\nParanoid 1966", "Lous and the Yakuza \nYuzmv\nPhilippine\nHervé", "Fujii Kaze\nVaundy\nRina Sawayama") ), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
解决方案
使用tidyr包的separate_rows()函数拆分合并单元格,同时清理冗余信息:
步骤1:加载依赖包
library(rvest) library(tidyverse) # 整合tidyr、dplyr等数据处理工具
步骤2:抓取并清洗表格
# 抓取页面并提取表格 upcoming_artists_url <- "https://newsroom.spotify.com/2020-03-09/36-new-artists-around-the-world-that-are-on-spotifys-radar/" upcoming_artists <- read_html(upcoming_artists_url) upcoming_artists_table <- html_table(upcoming_artists)[[1]] # 拆分合并单元格并清理数据 cleaned_table <- upcoming_artists_table %>% # 按换行符拆分第二列,自动复制对应国家/地区到新行 separate_rows(X2, sep = "\n") %>% # 清理艺术家名称前后的多余空格 mutate( X2 = str_trim(X2), # 移除国家/地区列中的注释文本(如Japan行的*RADAR说明) X1 = str_remove(X1, "\n\\*.*") ) %>% # 重命名列名提升可读性 rename( 国家/地区 = X1, 艺术家 = X2 )
处理后的数据示例
# 部分结果展示 # # A tibble: 12 × 2 # 国家/地区 艺术家 # <chr> <chr> # 1 Spain DORA # 2 Spain Aleesha # 3 Spain María José Llergo # 4 Spain Guitarricadelafuente # 5 Spain Paranoid 1966 # 6 France Lous and the Yakuza # 7 France Yuzmv # 8 France Philippine # 9 France Hervé # 10 Japan Fujii Kaze # 11 Japan Vaundy # 12 Japan Rina Sawayama
关键说明
separate_rows():自动拆分含多行内容的单元格,同时保留对应行的其他列数据,完美解决跨单元格合并问题str_trim():去除艺术家名称前后的冗余空格(原数据换行后可能附带空格)str_remove():清理国家/地区列中的额外注释,让数据更整洁
内容的提问来源于stack exchange,提问作者driver
相关产品推荐
相关产品推荐

