从htmlTable下载/抓取表格

时间:2019-02-11 00:32:38

标签: r download downloadfile

我正在尝试从

下载csv

https://oceanwatch.pifsc.noaa.gov/erddap/griddap/goes-poes-1d-ghrsst-RAN.html

或者我正在尝试从此处找到的网站抓取HTML表格输出的数据框

https://oceanwatch.pifsc.noaa.gov/erddap/griddap/goes-poes-1d-ghrsst-RAN.htmlTable?analysed_sst[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)],analysis_error[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)],mask[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)],sea_ice_fraction[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)]

我尝试使用抓取数据

library(rvest)
url <- read_html("https://oceanwatch.pifsc.noaa.gov/erddap/griddap/goes- 
  poes-1d-ghrsst-RAN.htmlTable?analysed_sst[(2019-02-09T12:00:00Z):1:(2019- 
  02-09T12:00:00Z)][(-7):1:(42)][(179):1:(238)],analysis_error[(2019-02- 
  09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-7):1:(42)][(179):1: 
  (238)],mask[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-7):1:(42)] 
  [(179):1:(238)],sea_ice_fraction[(2019-02-09T12:00:00Z):1:(2019-02- 
  09T12:00:00Z)][(-7):1:(42)][(179):1:(238)]")

test <-  url %>%
  html_nodes(xpath='table.erd.commonBGColor.nowrap') %>%
  html_text()

而且我尝试使用

下载一个csv
download.file(url, destfile = "~/Documents/test.csv", mode = 'wb')

但两者都不起作用。 download.file函数下载了带有节点描述的csv。 rvest方法在Macbook上给了我一个很大的字符串,在Windows上给了我一个空的数据框。我也尝试过使用选择器(chrome扩展名)仅获取我需要的数据,但选择器似乎在htmlTable上不起作用

1 个答案:

答案 0 :(得分:0)

我设法找到了使用htmltab包的解决方法,虽然不确定它是否是最佳选择,但它对于网页来说是大数据框架,花了一段时间才加载到数据框架中。 table [2]用于实际的表,因为在链接中有2个html表。

url1 <- "https://oceanwatch.pifsc.noaa.gov/erddap/griddap/goes-poes-1d-ghrsst-RAN.htmlTable?analysed_sst[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)],analysis_error[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)],mask[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)],sea_ice_fraction[(2019-02-09T12:00:00Z):1:(2019-02-09T12:00:00Z)][(-6.975):1:(42.025)][(179.025):1:(238.025)]"
tbls <- htmltab(url1,which = "//table[2]")
rdf <- as.data.frame(tbls)

让我知道是否有帮助。