2016-03-31 8 views
1

私はダウンロードに興味を持っていたファイルへのリンクが含まれているFTPリンクがあります。私は、次を使用して、すべてのURLを一覧表示することができます特定の条件を満たすFTP URLをダウンロードするにはどうすればよいですか?

ftp://lidar.wustl.edu/Phelps_Rolla/

を:

import urllib2 
import BeautifulSoup 

request = urllib2.Request("ftp://lidar.wustl.edu/Phelps_Rolla/") 
response = urllib2.urlopen(request) 
soup = BeautifulSoup.BeautifulSoup(response) 

>>> soup 
drwxrwxrwx 1 user  group   0 Nov 7 2012 . 
drwxrwxrwx 1 user  group   0 Nov 7 2012 .. 
drwxrwxrwx 1 user  group   0 Nov 7 2012 ESRI_Grids 
drwxrwxrwx 1 user  group   0 Nov 7 2012 ESRI_Shapefiles 
drwxrwxrwx 1 user  group   0 Nov 7 2012 LAS_Files 
-rw-rw-rw- 1 user  group  545700 May 27 2011 LiDAR Accuracy Report_Rolla.pdf 
drwxrwxrwx 1 user  group   0 Nov 7 2012 Rolla Survey 
-rw-rw-rw- 1 user  group  4865 May 26 2011 Rolla_SEMA_Tile_Index.dbf 
-rw-rw-rw- 1 user  group   503 May 26 2011 Rolla_SEMA_Tile_Index.prj 
-rw-rw-rw- 1 user  group   188 May 26 2011 Rolla_SEMA_Tile_Index.sbn 
-rw-rw-rw- 1 user  group   124 May 26 2011 Rolla_SEMA_Tile_Index.sbx 
-rw-rw-rw- 1 user  group  1100 May 26 2011 Rolla_SEMA_Tile_Index.shp 
-rw-rw-rw- 1 user  group  12682 May 31 2011 Rolla_SEMA_Tile_Index.shp.xml 
-rw-rw-rw- 1 user  group   140 May 26 2011 Rolla_SEMA_Tile_Index.shx 

リンクをダウンロードするにはどうすればよいですか拡張子 ".dbf"、 ".prj"、 ".shp"、 ".shx"の "タイル"または "タイル"

答えて

3

あなたはurllib abd美味しいスープを使用していますが、FTPに特化した標準ライブラリモジュールftplibを扱っている方がおそらく良い選択です。 docsに行き、FTPに接続して接続とリストディレクトリを開く方法を読んで、そこには簡単な歩道があります。

次の手順では、ファイルをフィルタリングする方法を考えています。これは、リスト内包の文字列をいくつかの文字列が内部にあるものにフィルタリングすることの問題です。 this questionまたはthis questionを参照してください。最後に、FTP経由でファイルをダウンロードする方法をgoogleに設定する必要があります(will find this question)。ファイルのダウンロードはftp.retrbinary()の呼び出しで行われます。

from ftplib import FTP 

ftp = FTP("lidar.wustl.edu") 
ftp.login() 
ftp.cwd("Phelps_Rolla") 
# list files with ftplib 
file_list = ftp.nlst() 

for f in file_list: 
    # apply your filters 
    if "tile" in f.lower() and any(f.endswith(ext) for ext in ['dbf', 'prj', 'shp', 'shx']): 
     # download file sending "RETR <name of file>" command 
     # open(f, "w").write is executed after RETR suceeds and returns file binary data 
     ftp.retrbinary("RETR {}".format(f), open(f, "wb").write) 
     print("downloaded {}".format(f)) 
ftp.quit() 
:ここ

は、私は上記のすべてのことを行い、簡単なスクリプトです