2013-12-03 2 views
6

Я ищу способ автоматизировать процесс загрузки спутниковых изображений. На скриншоте показан тип и формат файлов, которые меня интересуют при загрузке (.ntf и 150 МБ файлов).Как автоматизировать загрузку спутниковых изображений?

Я столкнулся с следующим кодом от TheBioBucket, который выглядит многообещающим, хотя XML-пакет R устарел.

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]) 

Есть хороший способ автоматизировать процесс загрузки файлов .ntf программно с помощью R или Python?

enter image description here

+3

Почему XML устарел? Что не так с подходом biobucket (1) parse html 2) извлечь ссылки 3) скачать ссылки)? – EDi

+1

Как насчет файлов ntf, которые составляют 450 МБ? Действительно ли это так? – Andy

+0

@ Энди Меня интересуют только файлы размером ~ 150 МБ .ntf. – Borealis

ответ

2

Зачистка, безусловно, легко реализовать в 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

В RXML пакет может облегчить то, что вам нужно довольно легко. Вот место, чтобы начать

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 также будет обрезано.

Смежные вопросы