R-如何使用xpath从表单元格中获取值?

时间:2018-11-03 05:23:02

标签: r xpath web-scraping rvest

我正在R中尝试从www.baseball-reference.com抓取多个玩家的一些统计数据。我已经能够从站点上的特定页面上抓取其他元素,但是在从出现在所有玩家统计信息页面上的特定表格中抓取时遇到了问题。表ID为“ batting_value”,而表标题为“ Player Value--Batting”的页面上显示的节点标题。

这是一个示例页面:

https://www.baseball-reference.com/players/b/brownro02.shtml

我有兴趣从“玩家价值-击球”表的底行中抓取“ PA”值。

我已经尝试过inspect > copy xpath,在上述示例网址的情况下,它为我带来了xpath

//*[@id="batting_value"]/tfoot/tr/td[3]

但是当我尝试使用该路径抓取时...

 library(dplyr)
 library(rvest)

 xpath <- '//*[@id="batting_value"]/tfoot/tr/td[3]'

 tables <- read_html(url)

 pa <- tables %>%
         html_node(xpath = xpath) %>%
         html_text()
 pa
[1] NA

似乎API甚至找不到节点:

 tables %>%
         html_node(xpath = xpath)
{xml_missing}
<NA>

为什么html_node找不到此节点,我该如何从“玩家价值-击球”表中抓取该值?

1 个答案:

答案 0 :(得分:2)

在评论中,对吧?

url ='https://www.baseball-reference.com/players/b/brownro02.shtml'
library(rvest)
tab = read_html(url) %>% 
  html_nodes(xpath = '//*[@id="all_batting_value"]//comment()') %>%
  html_text() %>% read_html() %>% 
  html_table() %>% as.data.frame()

tab
       Year       Age        Tm Lg   G  PA Rbat Rbaser Rdp Rfield Rpos RAA  WAA Rrep RAR  WAR waaWL. X162WL. oWAR dWAR oRAR   Salary   Pos
1      1999        23       CHC NL  33  70   -4      0   0     -3    0  -8 -0.8    2  -5 -0.5  0.478   0.495 -0.3 -0.3   -3           7/89
2      2000        24       CHC NL  45  98    4      0   0      0   -1   3  0.3    3   6  0.6  0.507   0.502  0.6 -0.2    7 $210,000  7/98
3      2001        25       CHC NL  39  92    2      0   0      0   -1   0  0.0    3   3  0.3  0.500   0.500  0.3 -0.2    3 $230,000 7/D98
4      2002        26       CHC NL 111 231  -11     -1   0     -3   -2 -16 -1.7    7  -9 -1.0  0.485   0.490 -0.7 -0.6   -6 $255,000 78/9D
5 4 Seasons 4 Seasons 4 Seasons    228 491   -9     -1   0     -6   -4 -21 -2.2   15  -5 -0.8  0.491   0.495 -0.1 -1.2    1 $695,000      
  Awards
1     NA
2     NA
3     NA
4     NA
5     NA