使用rvest在r中使用不同目录字符串抓取多个网页

使用rvest在r中使用不同目录字符串抓取多个网页,r,web-scraping,rvest,R,Web Scraping,Rvest,我知道有很多类似的问题,但我似乎还没有找到一个这样的问题(如果我错了,请原谅我)。我正试图从一个网站上获取天气数据,我成功地在其中一个网页上获取了这些数据。然而,我想循环这个过程。我看过 但我不相信他们能解决我的问题 目录从http://climate.rutgers.edu/stateclim_v1/nclimdiv/index.php?stn=NJ00&elem=avgt到 http://climate.rutgers.edu/stateclim_v1/nclimdiv/index.p

我知道有很多类似的问题,但我似乎还没有找到一个这样的问题(如果我错了,请原谅我)。我正试图从一个网站上获取天气数据,我成功地在其中一个网页上获取了这些数据。然而,我想循环这个过程。我看过

但我不相信他们能解决我的问题

目录从
http://climate.rutgers.edu/stateclim_v1/nclimdiv/index.php?stn=NJ00&elem=avgt

  http://climate.rutgers.edu/stateclim_v1/nclimdiv/index.php?stn=NJ00&elem=pcpn
等等。。即使它们的数量没有增加,我怎么能循环通过它们呢

代码:

nj_weather_data<-read_html("http://climate.rutgers.edu/stateclim_v1/nclimdiv/")
### Get info you want from web page###
hurr<-html_nodes(nj_weather_data,"#climdiv_table")
### Extract info and turn into dataframe###
precip_table<-as.data.frame(html_table(hurr))%>%
  select(-Rank)

nj_天气数据假设你想要平均T,最小T,降水量。。。查看当您单击温度表上方的表中的任意一个时url的变化方式。这是通过javascript实现的,为了实现这一点,您必须通过某种(无头)浏览器(如phantomJS)加载页面

另一种方法是只获取单个页面的名称,然后将其附加到url并加载数据

library(rvest)

# notice the %s at the end - this is replaced by elements of cs in sprintf
# statement below
x <- "http://climate.rutgers.edu/stateclim_v1/nclimdiv/index.php?stn=NJ00&elem=%s"
cs <- c("mint", "avgt", "pcpn", "hdd", "cdd")

# you could paste together new url using paste, too
customstat <- sprintf(x, cs) # %s is replaced with mint, avgt...

# prepare empty object for results
out <- vector("list", length(customstat))
names(out) <- cs

# get individual table and insert it into the output
for (i in customstat) {
  out[[which(i == customstat)]] <- read_html(i) %>%
    html_nodes("#climdiv_table") %>%
    html_table() %>%
    .[[1]]
}

> str(out)
List of 5
 $ mint:'data.frame':   131 obs. of  15 variables:
  ..$ Rank  : logi [1:131] NA NA NA NA NA NA ...
  ..$ Year  : chr [1:131] "1895" "1896" "1897" "1898" ...
  ..$ Jan   : chr [1:131] "18.1" "18.6" "18.7" "23.2" ...
  ..$ Feb   : chr [1:131] "11.7" "20.7" "22.5" "22.1" ...
库(rvest)
#请注意末尾的%s-它被sprintf中的cs元素所取代
#以下声明

x您可以从带有统计信息的表中提取(或复制/粘贴)值(例如,从
onclick=“submitForm('maxt');”
)中提取(或复制/粘贴)值,并基于该值构建链接。您可以使用该链接来清理表格。@RomanLuštrik您介意提供一个示例或一个示例的链接吗。我对你的意思有点困惑谢谢你的回答!不过我有个简单的问题。。您从何处获得%s?@KWANGER url是我通过添加它构建的<代码>%s
是代码中需要的特殊字符,请参见
?sprintf
(我也对代码进行了一些注释,希望能有所帮助)。好的,这很有意义!谢谢你的回复!