使用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
相关产品推荐
相关产品推荐

