我已经在R中使用“readHTMLtable”在没有任何问题的情况下使用XML包抓取各种篮球参考页面一段时间了,但现在我有一个。当我试图刮擦玩家页面的分割部分时,它只返回表格的第一行而不是全部。
例如:
URL="http://www.basketball-reference.com/players/j/jamesle01/splits/"
tablefromURL = readHTMLTable(URL)
table = tablefromURL[[1]]
这给了我表中只有一行,第一行。但我想要所有的行。我认为问题是表中有多个标题,但我不确定如何解决这个问题。
由于
答案 0 :(得分:2)
为什么不试试rvest
库。您可以使用
library(rvest)
dd <- html_session("http://www.basketball-reference.com/players/j/jamesle01/splits/") %>%
html_node("table#stats") %>%
html_table()
数据中混合的标题仍然有点混乱,但确实提取整个表格。
使用
进行测试R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
other attached packages:
[1] rvest_0.2.0
loaded via a namespace (and not attached):
[1] httr_0.6.1 magrittr_1.5 stringr_0.6.2
答案 1 :(得分:2)
您可以对表格主体进行过滤:
library(XML)
appURL <- "http://www.basketball-reference.com/players/j/jamesle01/splits/"
doc <- htmlParse(appURL)
appTables <- doc['//table/tbody']
appTables
将是一个包含12个表无标题的列表。要检索标题,您可以从thead
:
myHeaders <- unlist(doc["//thead/tr[2]/th", fun = xmlValue])
myTables <- lapply(appTables, readHTMLTable, header = myHeaders)
您可以使用以下内容将数据放在一个大表中:
bigTable <- do.call(rbind, myTables)
> head(bigTable)
Split Value G GS MP FG FGA 3P 3PA FT FTA ORB TRB AST STL BLK TOV PF PTS FG% 3P% FT%
1 Total 871 870 34364 8582 17289 1184 3462 5553 7432 1049 6239 6011 1483 698 2906 1615 23901 .496 .342 .747
2 Place Home 441 440 17167 4201 8307 567 1627 2805 3706 507 3133 3082 711 387 1413 744 11774 .506 .348 .757
3 Road 430 430 17197 4381 8982 617 1835 2748 3726 542 3106 2929 772 311 1493 871 12127 .488 .336 .738
4 All-Star Pre 569 568 22349 5544 11167 759 2205 3576 4791 655 4051 3966 967 456 1940 1087 15423 .496 .344 .746
5 Post 302 302 12015 3038 6122 425 1257 1977 2641 394 2188 2045 516 242 966 528 8478 .496 .338 .749
6 Result Win 572 571 22196 5783 11094 772 2154 3749 4931 677 4241 4132 1032 496 1793 1016 16087 .521 .358 .760
TS% USG% ORtg DRtg MP PTS TRB AST
1 .581 31.9 116 103 39.5 27.4 7.2 6.9
2 .592 30.9 118 102 38.9 26.7 7.1 7.0
3 .571 32.8 114 105 40.0 28.2 7.2 6.8
4 .581 31.7 116 103 39.3 27.1 7.1 7.0
5 .582 32.2 117 104 39.8 28.1 7.2 6.8
6 .606 31.7 122 99 38.8 28.1 7.4 7.2
答案 2 :(得分:0)
查看htmltab包(https://github.com/crubba/htmltab)。我为更复杂的HTML表开发了这个包,其中readHTMLTable()几乎没用。
devtools::install_github("crubba/htmltab")
library(htmltab)
htmltab(doc = "http://www.basketball-reference.com/players/j/jamesle01/splits/", header = 1:2)