使用R刮擦比赛结果页面

时间:2019-09-16 22:42:46

标签: r web-scraping

我参加了一场比赛,他们只展示您的成绩,但是我想看看我如何与其他人比较。我在其他比赛中也这样做过,通常结果会显示在一张表格中,但是这似乎有所不同。我不确定从哪里开始,也许有些人可以向我指出正确的方向,最好是使用R。

这是获胜运动员成绩的链接。我想得到: 名称,国家,BIB以及所有时间。

https://results.sporthive.com/events/6577137678160433152/races/465951/bib/10

我应该去哪里看?我以前使用过rvest,但是这里似乎并没有解决问题。似乎没有涉及到HTMLtable。

以下内容运行无错误,但返回一个空表:

tables <- GET("https://results.sporthive.com/events/6577137678160433152/races/465951/bib/10") 
result <- readHTMLTable(rawToChar(tables$content))

在使用时,我看不到任何可以访问的节点(按照Simon的链接:

my_session <- html_session("https://results.sporthive.com/events/6577137678160433152/races/465952/bib/10")

更新:以下返回带有元素的列表,其中包含我想要的数据。

library(RSelenium)

  # start the server and browser(you can use other browsers here)
  rD <- rsDriver(browser=c("firefox"))
  driver <- rD$client

  driver$navigate("https://results.sporthive.com/events/6577137678160433152/races/465952/bib/2404")

  elements <- driver$findElements(using = "css",".ng-binding") 

#  Use apply functions to extract elements:
    texts_lapply <- lapply(elements,function(x) x$getElementText()[[1]])

1 个答案:

答案 0 :(得分:1)

所有这些数据均来自API调用,您可以在按F5刷新页面时在浏览器网络标签中找到该API。您会收到json响应,可以解析任何内容

library(jsonlite)

data <- jsonlite::read_json('https://eventresults-api.sporthive.com/api/events/6577137678160433152/races/465951/bib/10')

print(data$fullClassification$athlete$name)
print(data$fullClassification$classification)