rvest 网络抓取 hltv
r rvest webscraping hltv
是的,这只是另一个 "how-to-scrape" 问题。很抱歉,但我也阅读了以前的答案和 rvest
的手册。
我正在为我的作业做网络抓取(所以我不打算将这些数据用于任何商业问题)。这个想法是为了表明团队的平均技能会影响个人技能。我正在尝试使用来自 HLTV.org 的 CS:GO 数据。
可在 http://www.hltv.org/?pageid=173&playerid=9216
获取信息
我需要两个表:Keystats(仅数据)和 Teammates(数据和 URL)。我尝试使用 SelectorGadget 生成的 CSS 选择器,我也尝试分析网页的源代码。我失败了。我正在执行以下操作:
library(rvest)
library(dplyr)
url <- 'http://www.hltv.org/?pageid=173&playerid=9216'
info <- html_session(url) %>% read_html()
info %>% html_node('.covSmallHeadline') %>% html_text()
你能告诉我这是正确的 CSS 选择器吗?
如果您查看源代码,这些表格不是 HTML 表格,而只是一堆嵌套不一致的 div 和用于对齐的内联 CSS。因此,最简单的方法是获取所有文本并在之后修复字符串,因为数据要么全是数字,要么根本不是数字。
library(rvest)
library(tidyverse)
h <- 'http://www.hltv.org/?pageid=173&playerid=9216' %>% read_html()
h %>% html_nodes('.covGroupBoxContent') %>% .[-1] %>%
html_text(trim = TRUE) %>%
strsplit('\s*\n\s*') %>%
setNames(map_chr(., ~.x[1])) %>% map(~.x[-1]) %>%
map(~data_frame(variable = gsub('[.0-9]+', '', .x),
value = parse_number(.x)))
#> $`Key stats`
#> # A tibble: 9 × 2
#> variable value
#> <chr> <dbl>
#> 1 Total kills 9199.00
#> 2 Headshot %% 46.00
#> 3 Total deaths 6910.00
#> 4 K/D Ratio 1.33
#> 5 Maps played 438.00
#> 6 Rounds played 11242.00
#> 7 Average kills per round 0.82
#> 8 Average deaths per round 0.61
#> 9 Rating (?) 1.21
#>
#> $TeammatesRating
#> # A tibble: 4 × 2
#> variable value
#> <chr> <dbl>
#> 1 Gabriel 'FalleN' Toledo 1.11
#> 2 Fernando 'fer' Alvarenga 1.11
#> 3 Joao 'felps' Vasconcellos 1.09
#> 4 Epitacio 'TACO' de Melo 0.98
是的,这只是另一个 "how-to-scrape" 问题。很抱歉,但我也阅读了以前的答案和 rvest
的手册。
我正在为我的作业做网络抓取(所以我不打算将这些数据用于任何商业问题)。这个想法是为了表明团队的平均技能会影响个人技能。我正在尝试使用来自 HLTV.org 的 CS:GO 数据。
可在 http://www.hltv.org/?pageid=173&playerid=9216
获取信息我需要两个表:Keystats(仅数据)和 Teammates(数据和 URL)。我尝试使用 SelectorGadget 生成的 CSS 选择器,我也尝试分析网页的源代码。我失败了。我正在执行以下操作:
library(rvest)
library(dplyr)
url <- 'http://www.hltv.org/?pageid=173&playerid=9216'
info <- html_session(url) %>% read_html()
info %>% html_node('.covSmallHeadline') %>% html_text()
你能告诉我这是正确的 CSS 选择器吗?
如果您查看源代码,这些表格不是 HTML 表格,而只是一堆嵌套不一致的 div 和用于对齐的内联 CSS。因此,最简单的方法是获取所有文本并在之后修复字符串,因为数据要么全是数字,要么根本不是数字。
library(rvest)
library(tidyverse)
h <- 'http://www.hltv.org/?pageid=173&playerid=9216' %>% read_html()
h %>% html_nodes('.covGroupBoxContent') %>% .[-1] %>%
html_text(trim = TRUE) %>%
strsplit('\s*\n\s*') %>%
setNames(map_chr(., ~.x[1])) %>% map(~.x[-1]) %>%
map(~data_frame(variable = gsub('[.0-9]+', '', .x),
value = parse_number(.x)))
#> $`Key stats`
#> # A tibble: 9 × 2
#> variable value
#> <chr> <dbl>
#> 1 Total kills 9199.00
#> 2 Headshot %% 46.00
#> 3 Total deaths 6910.00
#> 4 K/D Ratio 1.33
#> 5 Maps played 438.00
#> 6 Rounds played 11242.00
#> 7 Average kills per round 0.82
#> 8 Average deaths per round 0.61
#> 9 Rating (?) 1.21
#>
#> $TeammatesRating
#> # A tibble: 4 × 2
#> variable value
#> <chr> <dbl>
#> 1 Gabriel 'FalleN' Toledo 1.11
#> 2 Fernando 'fer' Alvarenga 1.11
#> 3 Joao 'felps' Vasconcellos 1.09
#> 4 Epitacio 'TACO' de Melo 0.98