Pau*_*yuk 11 xml r web-scraping rcurl
我想用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)
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
但我现在已经失去了对于如何隔离它们,并坦言xpathSApply和xpathApply迷惑beejeebies我了!
那么,有没有人知道如何制定一个命令来吸出<div class="cont">标签中包含的元素?
Sha*_*ane 16
在处理R中的Web抓取和XML时,这些问题非常有用:
关于您的特定示例,虽然我不确定您希望输出看起来像什么,但这会将"得分"作为字符向量:
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)
Run Code Online (Sandbox Code Playgroud)
该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'"
Run Code Online (Sandbox Code Playgroud)