首页 > 解决方案 > 当父目录的 URL 给出 404 时从网站下载文件

问题描述

我还不知道存在哪些文件,但我知道一堆肯定存在的文件的 URL 的基本结构。我想了解它们是什么并下载它们。

我可以毫无问题地下载单个文件,在这种情况下是马里兰州阿勒格尼县的土地覆盖数据:

download.file("https://cicwebresources.blob.core.windows.net/chesapeakebaylandcover/MD/ALLE_24001.zip"
    , destfile ="data/GIS_downloads/")

但我想下载 MD 州的所有土地覆盖数据 .zip 文件。

我看到了一些类似这样的网络抓取示例,并试图使其适用于我的情况:

library(stringi)
baseURL<- "https://cicwebresources.blob.core.windows.net/chesapeakebaylandcover/MD/"
doc <- read_html(baseURL)
# etc

但我要调用“父目录”的 URL 返回 404 错误。

鉴于我知道它们都共享相同的 URL 格式但不知道每个县的特定字符串等,我如何列出 MD 的所有 .zip 文件?

谢谢!

标签: rweb-scraping

解决方案


404错误应该从表面上看......也许解决方案是从一个可以加载的网页开始,并在那里找到所需的链接。正如@Gregor Thomas 和@r2evans 所建议的那样,该网站不允许我访问父目录,因此需要一种解决方法。

在这种情况下,我找到了另一个网页上列出的链接(不是 .zip 文件的父目录)。通过这种方式,我得到了所需链接的列表,尽管不是像上面评论中建议的那样巧妙地抓取。下面的代码让我现在想去的地方......

doc<-httr::GET("https://www.chesapeakeconservancy.org/conservation-innovation-center/high-resolution-data/land-cover-data-project/")

CIC<-"https://cicwebresources.blob.core.windows.net/chesapeakebaylandcover/MD/"
parsed<-XML::htmlParse(doc)
links <- XML::xpathSApply(parsed, "//a/@href")
todl<-links[grepl(CIC, links)]

该对象todl(要下载)具有我正在寻找的链接,但不知道包含哪些层和未包含哪些层。


推荐阅读