彼得的人表示可以用硒做到這一點。我也喜歡用優秀的selectr package 這個想法是簡單地與網站互動,然後在其他地方做。 squawkData應該包含所需的一切。
# RSelenium::startServer() # if needed
require(RSelenium)
remDr <- remoteDriver()
remDr$open()
remDr$setImplicitWaitTimeout(3000)
remDr$navigate("http://epl.squawka.com/stoke-city-vs-arsenal/01-03-2014/english-barclays-premier-league/matches")
squawkData <- remDr$executeScript("return new XMLSerializer().serializeToString(squawkaDp.xml);", list())
require(selectr)
example <- querySelectorAll(xmlParse(squawkData[[1]]), "crosses time_slice")
example[[1]]
<time_slice name="0 - 5" id="1">
<event player_id="531" mins="4" secs="39" minsec="279" team="44" type="Failed">
<start>73.1,87.1</start>
<end>97.9,49.1</end>
</event>
</time_slice>
免責聲明我是RSelenium軟件包的作者。操作的基本小貼士可以在RSelenium basics和 RSelenium: Testing Shiny apps查看。
進一步信息可以很容易地使用selectr訪問:
> xmlValue(querySelectorAll(xmlParse(squawkData[[1]]), "players #531 name")[[1]])
[1] "Charlie Adam"
> xmlValue(querySelectorAll(xmlParse(squawkData[[1]]), "game team#44 long_name")[[1]])
[1] "Stoke City"
UPDATE:
要處理例如成數據幀,你可以這樣做
out <- lapply(example, function(x){
# handle each event
if(length(x['event']) > 0){
res <- lapply(x['event'], function(y){
matchAttrs <- as.list(xmlAttrs(y))
matchAttrs$start <- xmlValue(y['start']$start)
matchAttrs$end <- xmlValue(y['end']$end)
matchAttrs
})
return(do.call(rbind.data.frame, res))
}
}
)
> head(do.call(rbind, out))
player_id mins secs minsec team type start end
event 531 4 39 279 44 Failed 73.1,87.1 97.9,49.1
event5 311 6 33 393 31 Failed 92.3,13.1 93.0,31.0
event1 376 8 57 537 31 Failed 97.7,6.1 96.7,16.4
event6 311 13 50 830 31 Failed 99.5,0.5 94.9,42.6
event11 311 14 11 851 31 Failed 99.5,0.5 93.1,51.0
event7 311 17 41 1061 31 Failed 99.5,99.5 92.6,50.1
你可能必須使用瀏覽器驅動器,如硒。有R接口;請參閱http://lluisramon.github.io/relenium/和http://johndharrison.github.io/RSelenium/。 – Ista
我從來沒有聽說過這樣的事情,新作業!我將如何使用它在squawka上刮這樣一個頁面?任何提示? –
有一個很好的例子,就是如何在R中使用Selenium [這裏](http://stackoverflow.com/a/22123344/1036500),目前這個問題的答案正好在你的[R標籤]之上, (http://stackoverflow.com/questions/tagged/r) – Ben