文字列に保存された URL を使用して Python 3 で Web からファイルをダウンロードする方法
Web からファイルをダウンロードしようとするとPython 3 の Web サーバーで URL として文字列を渡すと、バイト入力を要求するエラーが発生する可能性があります。この記事では、この問題を回避し、ファイルを正常に取得するためのいくつかの方法を紹介します。
urllib.request.urlopen の使用
Web ページのコンテンツを取得するには、urllib を利用します。 .request.urlopen()。この関数は応答オブジェクトを返します。このオブジェクトは変数に読み込むことができます:
import urllib.request
url = 'http://example.com/'
response = urllib.request.urlopen(url)
data = response.read() # a `bytes` object
urlib.request.urlretrieve の使用
ファイルをダウンロードして保存する最も簡単な方法は、次の方法を使用することです。 urllib.request.urlretrieve 関数:
import urllib.request
url = 'http://example.com/file.txt'
urllib.request.urlretrieve(url, 'file.txt')
このメソッドは、指定された URL からファイルをダウンロードし、'file.txt' としてローカルに保存します。
使用urlib.request.urlopen with shutil.copyfileobj
ダウンロード プロセスをより詳細に制御するには、次を使用します。 urllib.request.urlopen() を使用して、ファイルのようなオブジェクトを返します。このオブジェクトは、shutil.copyfileobj():
import urllib.request
import shutil
url = 'http://example.com/file.zip'
with urllib.request.urlopen(url) as response, open('file.zip', 'wb') as out_file:
shutil.copyfileobj(response, out_file)
ダウンロードをバイトとして保存する
速度を優先する場合は、ダウンロードしたデータをバイト オブジェクトに直接保存してから、ファイルに書き込まれますが、これは小さなファイルにのみ適しています:
import urllib.request
url = 'http://example.com/icon.png'
with urllib.request.urlopen(url) as response, open('icon.png', 'wb') as out_file:
data = response.read() # a `bytes` object
out_file.write(data)
圧縮ファイルの処理
urllib.request.urlopen() は、サーバーがランダム アクセスをサポートしている場合、圧縮ファイルの処理にも使用できます。
import urllib.request
import gzip
url = 'http://example.com/archive.gz'
with urllib.request.urlopen(url) as response:
with gzip.GzipFile(fileobj=response) as uncompressed:
file_header = uncompressed.read(64) # a `bytes` object
これらのメソッドのいずれかを実装すると、URL が文字列として保存されている場合でも、開発者は Python 3 で Web からファイルを正常にダウンロードできます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3