gpt4 book ai didi

python - 如何抓取这个 squawka 页面?

转载 作者:太空狗 更新时间:2023-10-29 22:22:38 25 4
gpt4 key购买 nike

我正在尝试提取以下信息:

在页面上

http://epl.squawka.com/stoke-city-vs-arsenal/01-03-2014/english-barclays-premier-league/matches

按下红色的“完整统计”按钮会打开一个菜单,其中包括(在左侧)按钮“Crosses”。这会在屏幕右侧打开一个足球场的图像,上面有 19 个箭头,这些是斯托克城在斯托克城与阿森纳队的比赛中的传中。它们采用颜色编码,红色 = 未完成,绿色 = 完成,黄色 = 关键通过。当你点击一个箭头时,它会告诉你谁传球了,在比赛的哪一分钟传球。此外,箭头显示了球员传球时所站的位置以及传球给球员的位置。

我希望能够抓取此页面,以便获得包含以下列的表格:

团队;发件人姓名;发件人位置;接收者的位置;分钟;箭头颜色

这是斯托克城的一组传中,我也想为阿森纳自动重复这个(因此,上表中的“俱乐部”列)。

虽然我过去也抓取过网页,但这些都是相当简单的静态页面,我完全不知道如何从这个页面抓取信息。我非常感谢有关如何抓取我刚才描述的数据的帮助。我精通 R,因此我特别感谢可以帮助我在 R 中实现此目的的代码,但我也非常感谢使用其他语言或软件的帮助。

谢谢,彼得

最佳答案

Peter 正如他们所说的那样,您可以使用 Selenium 做到这一点。我也喜欢使用优秀的 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 .

可以使用选择器轻松访问更多信息:

> 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

关于python - 如何抓取这个 squawka 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22121006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com