问题 如何在R中从单个元素中删除单个元素


我想用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>

但坦白说,我现在已经迷失了如何孤立它们 xpathSApply 和 xpathApply 混淆了我的蜜蜂!

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


8184
2018-06-08 15:14


起源

在做这样的事情时要小心......在大多数情况下,像FIFA或FIBA,NBA等组织不允许使用他们的数据 - 简单说明:他们的数据是他们的财产!所以下次提供一些虚拟HTML代码,或者只是指向一些无害的网站! =) - aL3xa


答案:


在处理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 function获取与给定条件匹配的所有值,并将它们作为向量返回。注意我是如何寻找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'"

16
2018-06-08 15:42



非常整洁,我很久以前就在找这样的东西,但最后还是用Python了!现在我可以运行更小的脚本并填充数据集!凉! - aL3xa