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

使用R语言爬取Eurovision 2023数据失败的技术求助

修复2023欧洲歌唱大赛数据爬取的R代码

原代码存在两个核心问题:

  • 拼写错误:html_是笔误,正确函数是html_nodes
  • CSS选择器匹配不准确,没有对应页面实际的元素结构

以下是修正后的完整代码,可以正确提取国家、排名、歌曲名称、歌手及得分数据:

# 加载所需包
library(rvest)
library(tidyverse)
library(robotstxt)

# 目标URL
url2 <- "https://eurovisionworld.com/eurovision/2023"

# 检查爬虫权限(可选但建议)
paths_allowed(url2)

# 读取页面内容
pages2 <- read_html(url2)

# 提取排名
rank <- pages2 %>%
  html_nodes("td:nth-child(1)") %>%
  html_text() %>%
  as.integer() %>%
  na.omit()

# 提取国家名称
country_names <- pages2 %>%
  html_nodes("td:nth-child(2) a") %>%
  html_text()

# 提取歌手名称
artists <- pages2 %>%
  html_nodes(".chart-table-artist") %>%
  html_text() %>%
  str_remove("^- ")  # 移除开头的"- "前缀

# 提取歌曲名称
songs <- pages2 %>%
  html_nodes(".chart-table-song") %>%
  html_text()

# 提取最终得分
points <- pages2 %>%
  html_nodes("td:nth-child(5)") %>%
  html_text() %>%
  as.integer()

# 合并为数据框
eurovision_2023 <- tibble(
  排名 = rank,
  国家 = country_names,
  歌手 = artists,
  歌曲 = songs,
  得分 = points
)

# 查看结果
print(eurovision_2023)

代码说明

  • 页面的排名在第1列<td>元素中,提取后转成整数并过滤空值
  • 国家名称在第2列的<a>标签内
  • 歌手和歌曲分别对应.chart-table-artist和.chart-table-song类的元素,歌手名称需要移除多余的前缀符号
  • 最终得分在第5列<td>元素中,转成整数类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:33:17