从 FTP 共享下载多个文件?

问题描述

我知道这个问题已被问过多次,但到目前为止,没有一个解决方案真正有效。

我想将一些文件提取到基于 URL 的网络工具。

这似乎是一个 FTP 共享,但正在使用

import ftplib
url = 'ftp://ftp.ebi.ac.uk/pub/databases/Metabolights/studies/public/MTBLS1167'
ftp = ftplib.FTP(url)

6 ftp = ftplib.FTP(url) gaierror: [Errno -2] 名称或服务未知

使用 wget 可以轻松下载单个文件

wget.download(url+'/'+filename,out=ms_dir)

然而,wget 的 Python 实现并没有实现 Linux 工具的所有功能。所以,像 wget.download(url+'/*.*',out=ms_dir) 这样的东西不起作用。

因此,我需要先拉取我要下载的文件列表,然后将文件一一下载。我试过beautifulsoup、requests、urllib。但是对于一个十年前可能已经解决了一百万次或根本不起作用的问题,所有解决方案似乎都过于复杂。

但是,例如

import requests
response = requests.get(url,params=params)

InvalidSchema:未找到用于...的连接适配器

import urllib3
http = urllib3.PoolManager()
r = http.request('GET',url)

URLSchemeUnkNown:不支持 URL 方案 ftp

等等。我不确定我在这里做错了什么。

解决方法

import ftplib
from urllib.parse import urlparse

def get_files_from_ftp_directory(url):
    url_parts = urlparse(url)
    domain = url_parts.netloc
    path = url_parts.path
    ftp = ftplib.FTP(domain)
    ftp.login()
    ftp.cwd(path)
    filenames = ftp.nlst()
    ftp.quit()
    return filenames

get_files_from_ftp_directory(URL)

谢谢,我使用的是整个 URL 而不仅仅是域来登录。我使用这个函数来获取文件名,然后使用更舒适的 wget api 下载它们。