我正在尝试提取以下信息:
在页面上
http://epl.squawka.com/stoke-city-vs-arsenal/01-03-2014/english-barclays-premier-league/matches
按下红色的“完整统计信息”按钮,将打开一个菜单,该菜单包括(左侧)“交叉”按钮。这将在屏幕的右侧打开带有19个箭头的足球场的图像,这些是斯托克在阿斯托纳(Stoke-Arsenal)比赛中的传球。它们用颜色编码,红色=未完成,绿色=已完成,黄色=密钥通过。当您单击箭头时,它将告诉您谁给了通行证以及比赛的进行时间。同样,箭头表示玩家传球时站立的位置以及玩家被传给的位置。
我希望能够抓取此页面,以便获得带有列的表格:
球队; 发件人姓名;发件人位置;接收者的位置;分钟; 箭头的颜色
这是斯托克制造的一组传球,我也想为阿森纳自动重复此操作(因此,在上表中的“俱乐部”列)。
尽管我过去曾经抓过网页,但是这些都是静态的相当简单的页面,而我对于如何从该页面抓取信息完全感到傻眼。对于如何抓取我刚刚描述的数据,我将非常感激。我精通R,所以我特别喜欢可以帮助我在R中实现这一目标的代码,但是我也非常感谢使用其他语言或软件的帮助。
谢谢彼得
彼得表示,您可以使用Selenium做到这一点。我还喜欢使用出色的选择器程序包。其想法是与网站进行短暂交互,然后在其他地方进行其余操作。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基础知识和RSelenium:Testing Shiny应用程序中查看有关操作的基本信息。
使用选择器可以轻松访问更多信息:
> 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"
更新:
要将示例处理为数据框,您可以执行以下操作
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句