【问题标题】:rvest r data scraping returning empty tablervest r 数据抓取返回空表
【发布时间】:2019-02-13 20:56:01
【问题描述】:

刚接触编程并尝试从以下站点抓取数据。当我运行下面的代码时,它返回一个空的数据集或表。任何帮助或替代方法将不胜感激。

url <- "https://fasttrack.grv.org.au/Dog/Form?id=2003010003" 
tab <- url %>% read_html %>%  
  html_node("dogruns_wrapper") %>%  
  html_text()    
View(tab)

已尝试使用 xpath 和相同的结果,并且 html_table() 而不是文本返回错误,即没有适用于 'html_table' 的方法应用于类“xml_missing”的对象。

【问题讨论】:

  • 我认为使用 rvest 无法完成,因为该表是通过 JavaScript 生成的。您应该尝试使用 RSelenium/splashr 或其他一些 JavaScript 渲染服务。
  • 谢谢米斯拉夫。我会调查这些。

标签: r web-scraping rvest


【解决方案1】:

正如 Mislav 所说,该表是使用 JavaScript 生成的,因此您最好的选择是 RSelenium

另外,如果你想获取表格,使用html_table()可以用更少的代码获取。

我的尝试:

# Load packages
library(rvest) #Loading the rvest package
library(magrittr) # for the '%>%' pipe symbols
library(RSelenium) # to get the loaded html of the webpage

# starting local RSelenium (this is the only way to start RSelenium that is working for me atm)
selCommand <- wdman::selenium(jvmargs = c("-Dwebdriver.chrome.verboseLogging=true"), retcommand = TRUE)
shell(selCommand, wait = FALSE, minimized = TRUE)
remDr <- remoteDriver(port = 4567L, browserName = "chrome")
remDr$open()

# define url
url <- "https://fasttrack.grv.org.au/Dog/Form?id=2003010003"

# go to website
remDr$navigate(url)

# as it's being loaded with JavaScript and it has a slow load, add a sleep here
Sys.sleep(10) # increase as needed

# get the html object of the webpage
html_obj <- remDr$getPageSource(header = TRUE)[[1]] %>% read_html()

# read the table in the html_obj
tab <- html_obj %>%  html_table() %>% .[[1]]

希望对您有所帮助!但是,请务必在执行之前检查网页是否允许抓取! 检查Terms and conditions

除非直接用于查看、打印、访问或 与网站互动以供您个人使用或作为 在网站或这些条款和条件中另有说明,您 不得复制、复制、修改、向公众传播、改编、 传输、分发、下载或存储网络的任何内容 网站(包括如下所述的比赛信息),或合并 未经 GRV 书面许可,将网站的任何部分转移到另一个网站 同意。

【讨论】:

  • 非常好的乌奈!!!这个表是用 Javascript 动态生成的吗?我测试了一些想到的想法,但我无法让它发挥作用。我什至无法让我的代码识别该 URL 上的一个表,但显然有一个。我能想到的只是 Javascript 从服务器动态提取数据并在页面加载时创建表格,但我不确定。有关此的更多信息会很棒!谢谢!
  • 哇,谢谢 Unai!在米斯拉夫把我送到正确的方向之后,我试图弄清楚这一点,但你让它变得如此简单,谢谢。绝对已阅读 t 和 c,这仅供个人使用,但感谢您的关注。
  • @ryguy72 我想是的。加载需要很多时间,所以这是我的猜测。我自己没有检查源代码,所以我不能确定。您对此问题/解决方案有什么具体问题?
  • @J.Doe 不客气!如果您对解决方案有任何不明白的地方,请告诉我!如果它对您有用,请不要忘记将我的解决方案标记为答案:)
  • @UnaiSanchez 在输入第二行时在第二行代码中收到此错误; shell中的错误(selCommand,wait = FALSE,minimized = TRUE):找不到函数“shell”似乎无法创建远程驱动程序。这是因为我使用的是 Mac 吗?我可以通过 SplashR 和 Docker 运行一个远程生态系统,但还没有找到任何代码来说明如何通过 SplashR 复制你在 RSelenium 中所做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多