【问题标题】:Download multiple files from FTP share? [duplicate]从 FTP 共享下载多个文件? [复制]
【发布时间】:2021-02-04 01:24:57
【问题描述】:

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

我想将一些文件拉取到基于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

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

【问题讨论】:

  • 查看ftplib 文档,它说: 示例: >>> from ftplib import FTP >>> ftp = FTP('ftp.python.org') # 连接到主机,默认端口>>> ftp.login() # 默认,即:用户匿名,密码匿名@
  • 这和我上面写的有什么不同?我已经在 FTP(URL) 收到一条错误消息,你的意思是我必须使用 FTP('ftp.ebi.ac.uk') 吗?我可以试试。那可能是我做错了。

标签: python python-requests urllib3 ftplib


【解决方案1】:
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 下载它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多