【问题标题】:Scrape data from flash page using rvest使用 rvest 从闪存页面中抓取数据
【发布时间】:2016-10-05 06:24:05
【问题描述】:

我正在尝试从此页面抓取数据:

http://www.atpworldtour.com/en/tournaments/brisbane-international-presented-by-suncorp/339/2016/match-stats/r975/f324/match-stats?

如果我尝试使用 css 选择器和通常的 rvest 语法来抓取玩家的姓名:

names <- read_html("http://www.atpworldtour.com/en/tournaments/brisbane-international-presented-by-suncorp/339/2016/match-stats/r975/f324/match-stats?") %>% 
html_nodes(".scoring-player-name") %>% sapply(html_text)

一切顺利。

不幸的是,如果我试图抓取下面的统计数据(首先发球得分,..) 使用选择器.stat-breakdown span 我无法检索任何数据。

我知道通常不建议使用 rvest 抓取动态创建的页面,但是我不明白为什么有些数据会被抓取而有些则不会。

【问题讨论】:

  • 看起来您要查找的数据在此标记“//script[@id='matchStatsData']”内的 JSON 对象中,并根据请求将其加载到表中。显然有很多方法可以使用正则表达式,但它很混乱。
  • 没办法(也许使用 Rselenium)?我愿意花时间

标签: r rvest


【解决方案1】:

我不使用 Rvest。如果您遵循下面的代码,您应该会得到图片中的格式,基本上是一个字符串,您可以根据分隔符将其转换为数据框 :, .

此标签还包含比网页 UI 中显示的更多信息。 我也可以尝试 RSelenium,但需要购买另一台 PC。所以如果 RSelenium 对我有用,我会告诉你。

library(XML)
library(RCurl)
library(stringr)

url<-"http://www.atpworldtour.com/en/tournaments/brisbane-international-presented-by-suncorp/339/2016/match-stats/r975/f324/match-stats?"
url2<-getURL(url)
parsed<-htmlParse(url2)
# get messi data from tag
step1<-xpathSApply(parsed,"//script[@id='matchStatsData']",xmlValue)
# removing some unwanted characters
step2<-str_replace_all(step1,"\r\n","")
step3<-str_replace_all(step2,"\t","")
step4<-str_replace_all(step3,"[[{}]\"]","")

然后输出是这样的字符串

【讨论】:

  • 谢谢!我已经能够提取我需要的信息。最后一件事,我想对抓取更有信心,您能否将我重定向到有关如何提取这些信息的指南(或至少对这些目的有用)?
  • 不客气。作为学习该主题的资源,我在互联网上找到了一本书用 R 自动收集数据,这是非常全面且真正伟大的资源。否则,如果我没有成功根据检查元素获取数据,我会转到 chrome 开发人员工具中的网络选项卡,并在 XHR 下查看可以包含数据的文件的文档。通常可能会有指向这些文件的 url 或数据包含在预览中............很难定义确切的方式如何去做
  • 别担心,我知道没有现成的食谱,但那本书正是我要找的
猜你喜欢
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2020-07-18
  • 2019-02-17
  • 1970-01-01
相关资源
最近更新 更多