用rvest刮not无法正常工作

时间:2018-06-28 18:52:16

标签: r dplyr rvest

我要抓取此页面上的第二个主表:https://www.hockey-reference.com/players/f/forsbfi01.html,“ NHL占有指标”表。 Rvest应该允许我轻松地做到这一点:

fil_link <- "https://www.hockey-reference.com/players/f/forsbfi01.html"

fil_pos <- fil_link %>% 
 read_html %>% 
 html_node(css = "#skaters_advanced") %>% 
 html_table(header = T)

但是我得到这个错误:

Error in UseMethod("html_table") : 
  no applicable method for 'html_table' applied to an object of class 
  "xml_missing"

在换出css代码的同时,我得到了具有基本相同代码的第一个表。另外,我查看了表代码,检查以确保获得了实际的表选择器,而不是容器,内部对象等。为什么不抓取呢?

1 个答案:

答案 0 :(得分:1)

这将解决此特定表的问题。 但是请注意,这是一个非常脆弱的解决方案。它假定矩阵结构只有3行,并且期望所有行都具有相同数量的元素。

library(tidyverse)
library(rvest)

## Create a function to parse every row in the table.
Hockey_table <- function(htmlObject) { 

  titlerow <- htmlObject %>% html_nodes(xpath = '//div[@class="stats_pullout"]/div/div/h4') %>%  html_text('data-tip')
  firstrow <- htmlObject %>% html_nodes(xpath = '//div[@class="stats_pullout"]/div/div/p[1]') %>% html_text()
  secondrow <- htmlObject %>% html_nodes(xpath = '//div[@class="stats_pullout"]/div/div/p[2]') %>% html_text()

  data.frame(titlerow, firstrow, secondrow)

}

 Page01 <- read_html('https://www.hockey-reference.com/players/f/forsbfi01.html')
Hockey_table(Page01)

结果:

   titlerow firstrow secondrow
 1   SUMMARY  2017-18    Career
 2        GP       67       331
 3         G       26       117
 4         A       38       138
 5       PTS       64       255
 6       +/-       27        26
 7        PS      8.3      32.1
 8       PIM       38       145
 9        SH      179       931
 10      GWG        6        24
 11      TOI    17:28     17:49
 12      CF%     53.0      54.9
 13     oZS%     54.1      63.4