R readHTMLTable()函数错误

时间:2012-08-31 02:08:36

标签: r html-parsing web-scraping

我在尝试使用R包XML中的readHTMLTable函数时遇到了问题。运行时

library(XML)
baseurl <- "http://www.pro-football-reference.com/teams/"
team <- "nwe"
year <- 2011
theurl <- paste(baseurl,team,"/",year,".htm",sep="")

readurl <- getURL(theurl)
readtable <- readHTMLTable(readurl)

我收到错误消息:

Error in names(ans) = header : 
'names' attribute [27] must be the same length as the vector [21]

我通过R Studio 0.96.330运行64位R 2.15.1。似乎有几个关于readHTMLTable()函数的问题,但没有一个问题解决了这个问题。有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

readHTMLTable()抱怨'names'属性时,很可能会将数据与为头标值解析的数据进行匹配。最简单的方法是简单地完全关闭标题解析:

table.list <- readHTMLTable(theurl, header=F)

请注意,我将返回值的名称从“readtable”更改为“table.list”。 (我也从1开始跳过getURL()调用。它对我不起作用.2。readHTMLTable()知道如何处理URL)。更改的原因是,如果没有进一步的指示,readHTMLTable()将搜索并解析它在给定页面上可以找到的每个HTML表,返回包含每个数据框的列表。

您之后发送的页面相当丰富,有8个单独的表格:

> length(table.list)
[1] 8

如果您只对页面上的单个表感兴趣,则可以使用which属性指定它并直接将其内容作为data.frame接收。

如果它在您不感兴趣的桌子上窒息,这也可以解决您的原始问题。许多页面仍然使用表格进行导航,搜索框等,所以值得首先查看页面。 / p>

但是在你的例子中不太可能出现这种情况,因为除了其中一个之外,它实际上只是窒息了。如果星星对齐并且您只对页面上成功运行的第三个表感兴趣(传递统计信息),您可以像这样抓住它,保持标题解析:

> passing.df = readHTMLTable(theurl, which=3)
> print(passing.df)
  No.             Age Pos  G GS  QBrec Cmp Att  Cmp%  Yds TD TD% Int Int% Lng  Y/A AY/A  Y/C   Y/G  Rate Sk Yds NY/A  ANY/A Sk% 4QC GWD
1  12  Tom Brady*  34  QB 16 16 13-3-0 401 611  65.6 5235 39 6.4  12  2.0  99  8.6  9.0 13.1 327.2 105.6 32 173  7.9   8.2 5.0   2   3
2   8 Brian Hoyer  26      3  0          1   1 100.0   22  0 0.0   0  0.0  22 22.0 22.0 22.0   7.3 118.7  0   0 22.0  22.0 0.0