【发布时间】:2019-04-17 17:38:18
【问题描述】:
我正在尝试在此网页上抓取第一个 100 行的表格: https://www.eliteprospects.com/league/ushl/stats/2018-2019?sort=ppg
我找不到一个 CSS 来一次抓取整个表格,所以我分别抓取每一列,然后尝试将所有列合并到一个数据框或小标题中。
library(tidyverse)
library(rvest)
# Player----------------------------------------------------------------
url <- read_html("https://www.eliteprospects.com/league/ushl/stats/2018-2019?sort=ppg")
# Player column
player <- url %>%
html_nodes("#skater-stats .player") %>%
html_text() %>%
str_trim()
player <- player[-1]
# Clean player column
player_df <- data.frame(player) %>%
mutate(player = as.character(player)) %>%
# Filter out empty values (those that have nchar of 1)
filter(nchar(player) > 0)
# Team----------------------------------------------------------------
team <- url %>%
html_nodes("#skater-stats .team") %>%
html_text() %>%
str_trim()
team_df <- data.frame(team) %>%
slice(-1) %>%
mutate(team = as.character(team))
team_df <- team_df %>%
filter(nchar(team) > 0)
# Number of Rows for Teams exceed 100 because some players played on several different teams throughout season
# Games Played-----------------------------------------------------------
gp <- url %>%
html_nodes("#skater-stats .gp") %>%
html_text() %>%
str_trim()
gp_df <- data.frame(games_played = gp) %>%
slice(-1)
gp_df <- gp_df %>%
mutate(games_played = as.character(games_played)) %>%
filter(nchar(games_played) > 0)
# Number of Rows for Games played exceed 100 because some players played on several different teams throughout season
# Goals-----------------------------------------------------------
goals <- url %>%
html_nodes("#skater-stats .g") %>%
html_text() %>%
str_trim()
goals_df <- data.frame(goals) %>%
slice(-1)
goals_df <- goals_df %>%
mutate(goals = as.character(goals)) %>%
filter(nchar(goals) > 0)
# Assists-----------------------------------------------------------
assists <- url %>%
html_nodes("#skater-stats .a") %>%
html_text() %>%
str_trim()
assists_df <- data.frame(assists) %>%
slice(-1)
assists_df <- assists_df %>%
mutate(assists = as.character(assists)) %>%
filter(nchar(assists) > 0)
# Total Points-----------------------------------------------------------
total_points <- url %>%
html_nodes("#skater-stats .tp") %>%
html_text() %>%
str_trim()
total_points_df <- data.frame(total_points) %>%
slice(-1)
total_points_df <- total_points_df %>%
mutate(total_points = as.character(total_points)) %>%
filter(nchar(total_points) > 0)
我面临的问题是我在player_df 中有 100 行球员数据,但因为有些球员曾效力于多个球队,所以有 120 行他们的统计数据。
例如,Brendan Furry (LW) 参加过两支球队。
如何删除单个球队的统计数据,只查看那些以可重复方式在多个球队打过球的球员的totals?我想多年执行相同的功能,所以我想创建一个功能!
谢谢
【问题讨论】: