rvest webscraping hltv

时间:2017-02-14 20:10:55

标签: r web-scraping css-selectors rvest

是的,这只是另一个“如何刮”的问题。很抱歉,我已经阅读了之前的答案以及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选择器?

1 个答案:

答案 0 :(得分:3)

如果查看源代码,那些表格不是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