的Python:下载文件在FTP服务器(Python: download a file over a

2019-06-17 14:28发布

我想下载一些公共数据文件。 我屏幕抓取获得的链接中的文件,而这一切是这个样子:

ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2001-2002/L28POC_B.xpt

我找不到请求图书馆网站上的任何文件。 1

提前致谢!

Answer 1:

requests库不支持FTP链接。

下载从FTP服务器你可以一个文件:

import urllib 

urllib.urlretrieve('ftp://server/path/to/file', 'file')
# if you need to pass credentials:
#   urllib.urlretrieve('ftp://username:password@server/path/to/file', 'file')

要么:

import shutil
import urllib2
from contextlib import closing

with closing(urllib2.urlopen('ftp://server/path/to/file')) as r:
    with open('file', 'wb') as f:
        shutil.copyfileobj(r, f)


Answer 2:

你可以试试这个

import ftplib

path = 'pub/Health_Statistics/NCHS/nhanes/2001-2002/'
filename = 'L28POC_B.xpt'

ftp = ftplib.FTP("Server IP") 
ftp.login("UserName", "Password") 
ftp.cwd(path)
ftp.retrbinary("RETR " + filename, open(filename, 'wb').write)
ftp.quit()


Answer 3:

使用的urllib2 。 对于更多的细节,看看这个从doc.python.org例子 :

下面是本教程,可以帮助一个片段

import urllib2

req = urllib2.Request('ftp://example.com')
response = urllib2.urlopen(req)
the_page = response.read()


Answer 4:

    import os
    import ftplib
    from contextlib import closing

    with closing(ftplib.FTP()) as ftp:
        try:
            ftp.connect(host, port, 30*5) #5 mins timeout
            ftp.login(login, passwd)
            ftp.set_pasv(True)
            with open(local_filename, 'w+b') as f:
                res = ftp.retrbinary('RETR %s' % orig_filename, f.write)

                if not res.startswith('226 Transfer complete'):
                    print('Downloaded of file {0} is not compile.'.format(orig_filename))
                    os.remove(local_filename)
                    return None

            return local_filename

        except:
                print('Error during download from FTP')


Answer 5:

正如一些人所指出的,请求不支持FTP但是Python有做其他库。 如果你想使用请求库保持有一个请求,FTP包,增加FTP能力的要求。 我用这个库中的一点,它的工作。 该文档是充斥着各种关于代码质量的警告虽然。 随着0.2.0的文件说:“这个库是在约4小时的总工作cowboyed在一起,没有测试,并且依赖于一些丑陋的黑客”。

import requests, requests_ftp
requests_ftp.monkeypatch_session()
response = requests.get('ftp://example.com/foo.txt')


Answer 6:

尝试使用wget的库蟒蛇。 你可以找到的文档,它在这里 。

    import wget
    link = 'ftp://example.com/foo.txt'
    wget.download(link)


Answer 7:

urllib2.urlopen处理FTP链接。



Answer 8:

urlretrieve不是为我工作,和官方文件说,他们可能会在未来的某个时刻变得过时。

import shutil 
from urllib.request import URLopener
opener = URLopener()
url = 'ftp://ftp_domain/path/to/the/file'
store_path = 'path//to//your//local//storage'
with opener.open(url) as remote_file, open(store_path, 'wb') as local_file:
    shutil.copyfileobj(remote_file, local_file)


文章来源: Python: download a file over an FTP server