12

我想用 R 来抓取这个页面:(http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html)和其他人,以获得进球者和时间。

到目前为止,这就是我所拥有的:

require(RCurl)
require(XML)

theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html"
webpage <- getURL(theURL, header=FALSE, verbose=TRUE) 
webpagecont <- readLines(tc <- textConnection(webpage)); close(tc)  

pagetree <- htmlTreeParse(webpagecont, error=function(...){}, useInternalNodes = TRUE)

并且 pagetree 对象现在包含一个指向我解析的 html 的指针(我认为)。我想要的部分是:

<div class="cont")<ul>
<div class="bold medium">Goals scored</div>
        <li>Philipp LAHM (GER) 6', </li>
        <li>Paulo WANCHOPE (CRC) 12', </li>
        <li>Miroslav KLOSE (GER) 17', </li>
        <li>Miroslav KLOSE (GER) 61', </li>
        <li>Paulo WANCHOPE (CRC) 73', </li>
        <li>Torsten FRINGS (GER) 87'</li>
</ul></div>

但我现在不知道如何隔离它们,坦率地说xpathSApplyxpathApply让我迷惑不解!

那么,有谁知道如何制定一个命令来吸出<div class="cont">标签中包含的元素?

4

1 回答 1

17

在处理 R 中的 Web 抓取和 XML 时,这些问题非常有帮助:

  1. 使用 XML 包将 html 表抓取到 R 数据帧中
  2. 如何将 XML 数据转换为 data.frame?

关于您的特定示例,虽然我不确定您希望输出看起来像什么,但这会将“得分目标”作为字符向量:

theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html"
fifa.doc <- htmlParse(theURL)
fifa <- xpathSApply(fifa.doc, "//*/div[@class='cont']", xmlValue)
goals.scored <- grep("Goals scored", fifa, value=TRUE)

xpathSApply函数获取与给定条件匹配的所有值,并将它们作为向量返回。请注意我是如何寻找具有 class='cont' 的 div 的。使用类值通常是解析 HTML 文档的好方法,因为它们是很好的标记。

你可以随心所欲地清理它:

> gsub("Goals scored", "", strsplit(goals.scored, ", ")[[1]])
[1] "Philipp LAHM (GER) 6'"    "Paulo WANCHOPE (CRC) 12'" "Miroslav KLOSE (GER) 17'" "Miroslav KLOSE (GER) 61'" "Paulo WANCHOPE (CRC) 73'"
[6] "Torsten FRINGS (GER) 87'"
于 2010-06-08T15:42:12.973 回答