我正尝试使用R从the Canadian Government's national weather and climate data reporting service批量下载气候数据。这是通过他们的网站提供的说明,这些说明说明了如何使用Cygwin进行此操作,不过,我希望希望将文件检索作为R中脚本的一部分包括在内,该脚本会反复获取多个站点和时间范围的数据并对其进行处理等。我对R有点陌生,因此在此过程中遇到了麻烦。 / p>
Readme.txt
基于URL的过程,可从Climate网站自动批量下载数据
(http://www.climate.weather.gc.ca)
版本:2016-05-10环境与气候变化加拿大
要在线阅读此文件,请访问: ftp://client_climate@ftp.tor.ec.gc.ca/Pub/Get_More_Data_Plus_de_donnees/
文件夹:Get_More_Data_Plus_de_donnees> Readme.txt
有关如何从环境与气候变化加拿大气候网站下载一个气象站所有天气数据的说明:
国家档案馆中气候站的每日更新列表,包括气候ID,站ID,WMO ID,TC ID和坐标,可在以下文件夹中找到:
Get_More_Data_Plus_de_donnees>电台清单EN.csv使用以下实用程序下载数据:
wget(GNU / Linux操作系统)
Cygwin(Windows操作系统)https://www.cygwin.com
自制软件(OS X-Apple)http://brew.sh/
示例以1998年至2008年以.csv格式下载黄刀A的所有可用小时数据的方法
命令行:
在`seq 1998 2008'中用于年份;在'seq 1 12'中用于月份;执行wget --content-disposition“ http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format= csv&stationID = 1706&Year = $ {year}&Month = $ {month}&Day = 14&timeframe = 1&submit = Download + Data“; done; done
位置:
年=命令行中的更改值(`seq 1998 2008`) month =在命令行中更改值(`seq 1 12`)
format = [csv | xml]:格式输出
timeframe = 1
:用于每小时数据
timeframe = 2
:用于每日数据
timeframe = 3
:用于每月数据
日期:“ day”变量的值未使用,可以是任意值 对于另一个工作站,更改变量stationID的值 对于XML格式的数据,在URL中将变量格式的值更改为xml。有关法语信息,请使用++ T%C3%A9l%C3%A9charger +%0D%0Ades + donn%C3%A9es更改下载+数据,并在url中用_f更改_e。
如有疑问或疑虑,请联系我们的国家气候服务办公室,网址为: ec.services.climatiques-climate.services.ec@canada.ca
如上所述,Cygwin命令为:
for year in `seq 2015 2018`;do for month in `seq 1 12`;do wget --content-disposition "http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=${year}&Month=${month}&Day=14&timeframe=1&submit=Download+Data" ;done;done
我知道download.file()
有一个wget
的选项,就像Cygwin命令所使用的那样,但是,当我尝试以下操作时:
download.file("http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=$2018&Month=$12&Day=14&timeframe=2&submit=Download+Data","X:/folderX/example.csv", method = "wget")
我遇到'wget' call had nonzero exit status
错误。
不确定这与Cygwin命令中的--content-disposition
有什么关系,还是不确定我是否正在使用正确的功能来实现这一点,因此非常感谢任何方向。
谢谢。
答案 0 :(得分:1)
您正在使用 http,您需要 https。 您的数字前面也有 $。
还有一些气候数据的一般使用所需的文件,例如台站列表,以便您知道在哪里请求: https://drive.google.com/uc?authuser=0&id=1egfzGgzUb0RFu_EE5AYFZtsyXPfZ11y2&export=download
您可以在此处找到有关列的信息: https://climate.weather.gc.ca/glossary_e.html#weather
这里有一些一般数据信息: https://climate.weather.gc.ca/about_the_data_index_e.html https://drive.google.com/drive/folders/1WJCDEU34c60IfOnG4rv5EPZ4IhhW9vZH
答案 1 :(得分:0)
您发布的链接中没有任何有用的信息。它似乎是某种着陆页,但其中不包含任何与天气相关的数据。无论如何,这是如何遍历URL数组并从中下载数据。只需对其进行修改即可满足您的需求。
library(RCurl);library(XML)
pageNum <- seq(1:10)
url <- paste0("http://www.totaljobs.com/JobSearch/Results.aspx?Keywords=Leadership<xt=&Radius=10&RateType=0&JobType1=&CompanyType=&PageNum=")
urls <- paste0(url, pageNum)
allPages <- lapply(urls, function(x) getURLContent(x)[[1]])
xmlDocs <- lapply(allPages, function(x) XML::htmlParse(x))
这是另一个例子。
mydownload <- function (start_date, end_date) {
start_date <- as.Date(start_date) ## convert to Date object
end_date <- as.Date(end_date) ## convert to Date object
dates <- as.Date("1970/01/01") + (start_date : end_date) ## date sequence
## a loop to download data
for (i in 1:length(dates)) {
string_date <- as.character(dates[i])
myfile <- paste0("C:/Users/Excel/Desktop/weather/", string_date, ".csv")
string_date <- gsub("-", "-", string_date) ## replace "-" with "/"
myurl <- paste("https://sci.ncas.ac.uk/leedsweather/Archive/CUSTOM-ARC-", string_date, "-METRIC.csv", sep = "")
download.file(url = myurl, destfile = myfile, quiet = TRUE)
}
}
mydownload("2013/11/25", "2013/11/30")
答案 2 :(得分:0)
正如@EmilyKothe所说,您可以使用R weathercan软件包批量下载ECCC站数据。我发现这仍然有些烦人,因为不是每个人都使用R。
因此,我基于weathercan功能构建了一个Shiny Web应用程序: https://nickrongkp.shinyapps.io/WeatherCan/ 该应用程序托管在shinyapps.io(运行时间有限的免费帐户)上,因此,为他人着想,请在完成后立即关闭浏览器。