微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

难以理解如何从该站点抓取数据(使用R)

我试图从这个站点使用R来刮取数据:
http://www.soccer24.com/kosovo/superliga/results/#

我可以做以下事情:

library(rvest)
doc <- html("http://www.soccer24.com/kosovo/superliga/results/")

但我很难知道如何获取数据.这是因为网站上的实际数据似乎是由Javascript生成的.我能做的是

html_text(doc)

但这会给人一种奇怪的文本模糊(这确实包含了数据,但却散布着奇怪的代码,而且根本不清楚我将如何解析它.

我想要提取的是所有比赛的比赛数据(日期,时间,球队,结果).此站点无需其他数据.

任何人都可以提供一些提示,如何从这个网站提取数据?

解决方法

使用Selenium与phantomjs
library(RSelenium)
pJS <- phantom()
remDr <- remoteDriver(browserName = "phantomjs")
appURL <- "http://www.soccer24.com/kosovo/superliga/results/#"
remDr$open()
remDr$navigate(appURL)

如果你想按下更多数据按钮,直到它不可见(所有匹配假定显示):

webElem <- remDr$findElement("css","#tournament-page-results-more a")
while(webElem$isElementdisplayed()[[1]]){
  webElem$clickElement()
  Sys.sleep(5)
  webElem <- remDr$findElement("css","#tournament-page-results-more a")
}
doc <- htmlParse(remDr$getPageSource()[[1]])

删除不需要的舍入数据并使用XML :: readHTMLTable以简化操作

# remove unwanted rounds html. Sometimes there are end of season extra games.
# These are presented in a seperate table.
invisible(doc["//table/*/tr[@class='event_round']",fun = removeNodes])
appData <- readHTMLTable(doc,which = seq(length(doc["//table"])-1),stringsAsFactors = FALSE,trim = TRUE)
if(!is.data.frame(appData)){appData <- do.call(rbind,appData)}
row.names(appData) <- NULL
names(appData) <- c("blank","Date","hteam","ateam","score")
pJS$stop()
> head(appData)
blank         Date           hteam            ateam score
1       01.04. 18:00     Ferronikeli          Ferizaj 4 : 0
2       01.04. 18:00          Istogu         Hajvalia 2 : 1
3       01.04. 18:00 Kosova Vushtrri Trepca Mitrovice 1 : 0
4       01.04. 18:00       Prishtina          Drenica 3 : 0
5       31.03. 18:00       Besa Peje            Drita 1 : 0
6       31.03. 18:00       Trepca 89       Vellaznimi 2 : 0

> tail(appData)
    blank         Date            hteam     ateam score
115       17.08. 22:00        Besa Peje Trepca 89 3 : 3
116       17.08. 22:00      Ferronikeli  Hajvalia 2 : 5
117       17.08. 22:00 Trepca Mitrovice   Ferizaj 1 : 0
118       17.08. 22:00       Vellaznimi   Drenica 2 : 1
119       16.08. 22:00  Kosova Vushtrri     Drita 0 : 1
120       16.08. 22:00        Prishtina    Istogu 2 : 1

根据需要进行进一步格式化.

原文地址:https://www.jb51.cc/html/227235.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐