我正在尝试从网站下载多个压缩文件。我已经查看了下载一个文件的答案,看起来很简单,但是我无法使其适用于多个文件。该网址有超过140个压缩文件,我想下载。
到目前为止,我的代码思想是:
import urllib
url = "http://ftp.geogratis.gc.ca/pub/nrcan_rncan/vector/geobase_nhn_rhn/shp_en/03/"
##search url for zipped files and download them (this is where I am stuck)
urlfile = (the zipped files??)
if urlfile.endswith (".zip"):
urllib.urlretrieve (url, r"C:\Users\maverick\Desktop\Canada Features")
我知道它甚至不能满足我的需要,但是我们会欣赏正确的方向。我也看过Scrapy,但我认为urlib应该能够完成任务。
答案 0 :(得分:1)
正如@Eric所说,这台服务器基本上是为ftp服务器运行html替代接口。您可以直接使用ftp界面,如:
from ftplib import FTP
import os
FTP_HOST = "ftp.geogratis.gc.ca"
FTP_DIR = "pub/nrcan_rncan/vector/geobase_nhn_rhn/shp_en/03/"
OUT_DIR = "/my/documents" # <-- point this to an appropriate location!
# connect to host
ftp = FTP(FTP_HOST)
ftp.login()
# get list of .zip files
ftp.cwd(FTP_DIR)
files = ftp.nlst()
files = [f for f in files if f.lower().endswith(".zip")]
# download files
num = len(files)
for i, fname in enumerate(files, 1):
print("Downloading {} ({}/{}) ... ".format(fname, i, num), end='')
local_file = os.path.join(OUT_DIR, fname)
with open(local_file, "wb") as outf:
ftp.retrbinary("RETR "+fname, outf.write)
print("done!")
ftp.close()
请注意,这可能需要一段时间;该目录包含9.3 GB的文件。