如何用rvest统计球员星级并将xml_nodeset转为数据框?
处理球员星级统计的rvest解决方案
步骤1:将xml_nodeset转换为可操作的tibble
假设你已经通过rvest获取到存储星星的td节点集(命名为star_nodes),可以直接将其转为tibble,保留节点对象以便后续解析:
library(tibble) library(dplyr) library(purrr) library(rvest) # 转换节点集为tibble star_tbl <- tibble(star_node = star_nodes)
步骤2:统计每个节点内的星星数量
星星在HTML中的实现通常有两种形式,对应不同的统计方式:
情况1:星星是带特定class的HTML元素(如<i class="fa fa-star"></i>)
通过CSS选择器定位星星元素,统计每个td节点内的元素数量:
star_tbl <- star_tbl %>% mutate( total_stars = map_int(star_node, ~ .x %>% html_nodes("[class*='star']") %>% length()) )
注:将[class*='star']替换为页面实际的星星元素选择器,比如.fa-star或span.star-icon
情况2:星星是文本符号(如★)
将节点转为文本后,用字符串统计函数计数:
library(stringr) star_tbl <- star_tbl %>% mutate( star_text = as.character(star_node), total_stars = str_count(star_text, "★") )
完整示例代码
如果还未获取节点集,这里给出从页面抓取到统计的完整流程:
# 加载所需包 library(rvest) library(tibble) library(dplyr) library(purrr) library(stringr) # 抓取页面并定位星星所在的td节点 page <- read_html("https://cbgm.news/stats/CONN_Ratings.html") star_nodes <- page %>% html_nodes("td[data-col='Ratings']") # 替换为实际的td选择器 # 转换为tibble并统计星级 player_star_stats <- tibble(star_node = star_nodes) %>% mutate( total_stars = map_int(star_node, ~ .x %>% html_nodes(".star") %>% length()) # 若为文本星星则替换为:total_stars = str_count(as.character(star_node), "★") )
内容的提问来源于stack exchange,提问作者Gabe O.
相关产品推荐
相关产品推荐

