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