2017-02-14 706 views
1

是的,这只是另一个“如何刮”问题。对不起,但我也读过以前的答案和rvest的手册。rvest Webscraping hltv

我正在做我的家庭作业的网络抓取(所以我不打算使用任何商业问题的数据)。这个想法是表明团队的平均技能影响个人技能。我正在尝试使用来自HLTV.org的CS:GO数据。

的信息,请http://www.hltv.org/?pageid=173&playerid=9216

我需要两个表:Keystats(仅数据)和队友(数据和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

该网站是否允许自动抓取? – GGamba

回答

3

如果您查看源代码,那些表格不是HTML表格,而是堆叠不一致的嵌套和内联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 
+0

非常感谢您第二次帮助我。上次我尝试了你提供的有趣的教程。你能告诉我如何保存Teammates表的URL? – Petr

+0

它们是相对的,因此您需要将它们粘贴到基本URL上,但是'h%>%html_nodes('。covSmallHeadline img〜a')%>%html_attr('href')' – alistaire