79

いくつかの公開データファイルをダウンロードしようとしています。スクリーンスクレイプしてファイルへのリンクを取得します。ファイルはすべて次のようになります。

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

RequestsライブラリのWebサイトにドキュメントが見つかりません。

4

9 に答える 9

107

requests library doesn't support ftp links.

To download a file from FTP server you could:

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')

Or:

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)

Python3:

import shutil
import urllib.request as request
from contextlib import closing

with closing(request.urlopen('ftp://server/path/to/file')) as r:
    with open('file', 'wb') as f:
        shutil.copyfileobj(r, f)
于 2012-08-01T22:22:07.270 に答える
65

あなたはこれを試すことができます

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()
于 2012-09-14T12:12:19.837 に答える
7

urllib2を使用します。詳細については、doc.python.org の次の例を確認してください。

役立つチュートリアルのスニペットを次に示します。

import urllib2

req = urllib2.Request('ftp://example.com')
response = urllib2.urlopen(req)
the_page = response.read()
于 2012-08-01T22:13:20.010 に答える
4

何人かの人々が指摘しているように、リクエストは FTP をサポートしていませんが、Python には FTP をサポートする他のライブラリがあります。requests ライブラリーを引き続き使用したい場合は、要求に FTP 機能を追加するrequests-ftpパッケージがあります。私はこのライブラリを少し使用しましたが、うまくいきます。ただし、ドキュメントにはコードの品質に関する警告がたくさんあります。0.2.0 の時点で、ドキュメントには、「このライブラリは、合計約 4 時間の作業でまとめられ、テストがなく、いくつかの醜いハックに依存しています」と記載されています。

import requests, requests_ftp
requests_ftp.monkeypatch_session()
response = requests.get('ftp://example.com/foo.txt')
于 2015-01-07T15:30:23.237 に答える
3

最近の Python バージョンの非同期機能を利用したい場合は、aiftpを使用できます(より一般的な aiohttp ライブラリと同じライブラリおよび開発者のファミリから)。以下は、クライアント チュートリアルから抜粋したコード例です。

client = aioftp.Client()
await client.connect("ftp.server.com")
await client.login("user", "pass")
await client.download("tmp/test.py", "foo.py", write_into=True)
于 2020-03-25T13:08:48.343 に答える
2

urllib2.urlopenftp リンクを処理します。

于 2012-08-01T22:02:18.757 に答える