我正在寻找一种自动下载卫星图像的方法。屏幕截图显示了我有兴趣下载的文件的类型和格式(.ntf和150MB文件)。
我遇到了TheBioBucket的以下代码看起来很有希望,尽管R包XML已经过时了。
require(XML)
dir.create("D:/GIS_DataBase/DEM/")
setwd("D:/GIS_DataBase/DEM/")
doc <- htmlParse("http://www.viewfinderpanoramas.org/dem3.html#alps")
urls <- paste0("http://www.viewfinderpanoramas.org", xpathSApply(doc,'//*/a[contains(@href,"/dem1/N4")]/@href'))
names <- gsub(".*dem1/(\\w+\\.zip)", "\\1", urls)
for (i in 1:length(urls)) download.file(urls[i], names[i])
是否有一种很好的方法可以使用R或Python以编程方式自动下载.ntf文件的过程?
答案 0 :(得分:2)
Scraping在Python中很容易实现。
# collect.py
import urllib, urllib2, bs4
from urlparse import urljoin
soup = bs4.BeautifulSoup(urllib2.urlopen("http://www.viewfinderpanoramas.org/dem3.html#alps"))
links = soup.find_all('a')
for link in links:
try:
if "/dem1/N4" in link['href']:
url = urljoin("http://www.viewfinderpanoramas.org/", link['href'])
filename = link['href'].split('/')[-1]
urllib.urlretrieve(url, filename)
#break
except:
pass
您可能希望更改文件名以包含要放置文件的路径
答案 1 :(得分:1)
在R
中,XML
包可以非常轻松地促进您的需求。这是一个开始的地方
library(XML)
demdir <- "http://www.viewfinderpanoramas.org/dem1/"
# this returns a data.frame with file names
dems <- readHTMLTable(demdir)[[1]]
# you'll want, for example, to download only zip files
demnames <- dems[grepl(".zip",dems$Name),"Name"]
# (but you can add other subsetting/selection operations here)
# download the files to the same name locally
# (change '.' if you want some other directory)
sapply(demnames, function(demfi) download.file(paste0(demdir,demfi), file.path(".",demfi)))
我能看到的唯一复杂因素是文件名太长(如果在网络浏览器中被截断),那么dems
中的文件名也会被截断。