我要抓取此页面上的第二个主表: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代码的同时,我得到了具有基本相同代码的第一个表。另外,我查看了表代码,检查以确保获得了实际的表选择器,而不是容器,内部对象等。为什么不抓取呢?
答案 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