You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中拆分从IMDB爬取的含|符号的列失败,求解决方案

解决IMDB爬取数据的列拆分问题

我看到你在用rvest爬取IMDB的投票和票房数据时,遇到了列拆分后全为空值的问题——这其实是因为你没注意到正则表达式里的特殊字符!

问题根源

你用separate时写了sep = "|",但|在正则表达式里是元字符,代表“或”的意思,R会把它当成“任意单个字符”的分隔符,自然拆分出来全是空值。你需要把它转义成\\|(R里反斜杠要写两个才能表示一个实际的反斜杠)。

完整解决方案

下面是修正后的代码,还帮你处理了票房列的M后缀,调整成你想要的列名格式:

library(rvest)
library(tidyr)
library(dplyr) # 用于后续的列处理,可选但更便捷

# 你的爬取代码(不变)
votes_gross <- pagesource %>% html_nodes(".sort-num_votes-visible") %>% html_text()

# 清理换行符并转为数据框
votes_gross <- gsub("\\r?\\n|\\r", " ", votes_gross)
votes_gross <- data.frame(votes_gross)

# 修正拆分逻辑:转义|,同时开启trim自动去除空格
votes_gross <- separate(
  votes_gross,
  col = "votes_gross",
  into = c("Votes", "Gross"),
  sep = "\\|",  # 关键:转义特殊字符|
  trim = TRUE   # 自动去掉拆分后字段两边的空格,不用额外处理
)

# 处理票房列的M后缀,并重命名列
votes_gross <- votes_gross %>%
  mutate(Gross = gsub("M$", "", Gross)) %>%  # 去掉末尾的"M"
  rename("Gross (Millions)" = Gross)         # 修改为你想要的列名

运行后结果

执行完上面的代码,你会得到如下格式的数据框:

VotesGross (Millions)
Votes: 489,547Gross: $700.06
Votes: 615,401Gross: $678.82
Votes: 192,034Gross: $608.58

补充:如果用strsplit的话

要是你想用strsplit,同样需要转义|,示例代码如下:

split_list <- strsplit(votes_gross$votes_gross, "\\|")
split_df <- do.call(rbind, lapply(split_list, trimws))
colnames(split_df) <- c("Votes", "Gross")
split_df <- as.data.frame(split_df)
# 后续同样可以用dplyr处理Gross列

内容的提问来源于stack exchange,提问作者cheklapkok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:53:28