ich ein Licht bearbeiten @ gballench Antwort zu tun hatte begonnen (da ich nicht rly die Punkte müssen), aber es ist komplizierter, als Sie es haben weil du nicht zu den Dateien kommst, die du mit diesem Idiom benötigst (was ich zu 99% sicher bin, ist aus einer Antwort von mir :-) aus einer ganzen Reihe von Gründen.
Zuerst days
muss auf Länge 3 gepolstert werden mit 0
s aber die Art, wie Sie es getan haben, wird das nicht tun. Zweitens möchten Sie wahrscheinlich alle .grb
Dateien aus jedem Jahr/00x Combo herunterladen, so dass Sie einen Weg brauchen, um diese zu bekommen. Schließlich erfordert diese Website eine Authentifizierung, daher müssen Sie sich registrieren und die Standardauthentifizierung dafür verwenden.
Etwas wie folgt aus:
library(purrr)
library(httr)
library(rvest)
years <- c(1980:1981)
days <- sprintf("%03d", 1:2)
sprintf("http://hydro1.gesdisc.eosdis.nasa.gov/data/NLDAS/NLDAS_MOS0125_H.002/%s/%%s/", years) %>%
map(~sprintf(.x, days)) %>%
flatten_chr() %>%
map(~{
base_url <- .x
sprintf("%s/%s", base_url, read_html(.x) %>%
html_nodes(xpath=".//a[contains(@href, '.grb')]") %>%
html_attr("href"))
}) %>%
flatten_chr() %>%
discard(~grepl("xml$", .)) %>%
walk(~{
output_path <- file.path("FULL DIRECTORY PATH", basename(.x))
if (!file.exists(output_path)) {
message(.x)
GET(
url = .x,
config = httr::config(ssl_verifypeer = FALSE),
write_disk(output_path, overwrite=TRUE),
authenticate(user = "[email protected]", password = "xldjkdjfid8y83"),
progress()
)
}
})
Sie finden das httr
Paket installieren müssen, die das curl
Paket installieren und schließlich libcurl
für einfachere Batch-Downloads in Zukunft zur Verfügung stellen.
Ich erinnerte mich, dass ich ein Konto hatte, also habe ich es mit dieser App verbunden & getestet dies (tötete es bei 30 Downloads) und es funktioniert. Ich fügte progress()
zum GET()
Anruf hinzu, also können Sie es sehen, einzelne Dateien herunterladend. Es überspringt bereits heruntergeladene Dateien (damit Sie es jederzeit beenden und neu starten können). Wenn Sie Dateien erneut herunterladen müssen, entfernen Sie einfach die Datei, die Sie erneut herunterladen möchten. Wenn Sie auch die .xml
Dateien benötigen, entfernen Sie den discard()
Aufruf.
Vielen Dank für die Antwort. Ich habe Ihren Code versucht, aber es gibt mir den folgenden Fehler: Fehler in open.connection (x, "rb"): SSL-Verbindungsfehler. Ich habe ein aktives Konto bei dieser Website und habe meine Anmeldeinformationen verwendet. Kann nicht verstehen, worum es sich bei diesem Fehler handelt. Außerdem gibt es in Ihrem Skript eine Möglichkeit, den Ausgabepfad anzugeben, an den die Daten heruntergeladen werden sollen. – user8848543
Bitte sehen Sie das Bild oben für die Sitzungsinformationen. – user8848543
Ich habe nicht das Admin-Privileg, um Zertifikate in Ubuntu zu aktualisieren. Glaubst du, dass dieser Code in Windows funktioniert? Wenn es funktioniert, gibt es auch eine Möglichkeit, den Ausgabedatenpfad anzugeben? Nur neugierig, auf welchem Betriebssystem Sie das Skript ausgeführt haben. Ich nehme an, das funktioniert für dich. – user8848543