0

我想从网络http://en.wikipedia.org/wiki/Brazil_national_football_team中提取一个表格

library(XML)
baseURL <- "http://en.wikipedia.org/wiki/Brazil_national_football_team"
xmltext <- htmlParse(baseURL)
xmltable <- xpathApply(xmltext, "//table[.//tbody//tr//th//a[@title='CONCACAF Gold Cup']]") 

这是 xpath :"//table[.//tbody//tr//th//a[@title='CONCACAF Gold Cup']]"

两者都不

xmltable <- xpathApply(xmltext, "//table[.//tbody//tr//th//a[@title='CONCACAF Gold Cup']]")  

也不

xmltable <- xpathApply(xmltext, "//table[//tbody//tr//th//a[@title='CONCACAF Gold Cup']]")

可以得到指定的表。如何编写 xpath 表达式?
请看附件。 在此处输入图像描述

4

2 回答 2

1

您必须使用..来获取 xpath 中的父元素://table[@class='wikitable']//th//a[@title='CONCACAF Gold Cup']/../../..

要获取表格,您可以使用XML::readHTMLTable

library(XML)
baseURL <- "http://en.wikipedia.org/wiki/Brazil_national_football_team"
xmltext <- htmlParse(baseURL)

## grep correct table
tableNode <- xpathApply(xmltext, "//table[@class='wikitable']//th//a[@title='CONCACAF Gold Cup']/../../..")[[1]]

## convert XMLNode into data.frame
concacafTable <- readHTMLTable(tableNode, header=FALSE, stringsAsFactors=FALSE)

## format table (remove useless "Gold Cup"-header (row 1) and set right header (row 2)
colnames(concacafTable) <- concacafTable[2, ]
concacafTable <- concacafTable[-c(1,2),]
concacafTable
#   Year       Round GP W D L GF GA
#3  1996  Runners-up  4 3 0 1 10  3
#4  1998 Third Place  5 2 2 1  6  2
#5  2003  Runners-up  5 3 0 2  6  4                                                 
#6 Total        3/11 14 8 2 4 22  9
于 2012-09-02T17:45:30.713 回答
0

我也找到了两个解析网络的秘书,

1.tbody 不为人知

tableNode <- xpathApply(xmltext, "//tbody") 

什么都得不到。网络中有很多tbody元素,没有一个被认为是正式的元素。

2.直接获取表格,不使用父元素的概念

tableNode <- xpathApply(xmltext, "//table[@class='wikitable'][./tr/th/a[@title='CONCACAF Gold Cup']]") can work too. 
于 2012-09-02T22:24:31.290 回答