Pythonでurllibを使用してファイルをローカルに保存する
「Webページの内容を開いて処理を行う」のurllibモジュールを使用すると、ファイルをローカルにダウンロード保存することが簡単にできる。
関数を使用する方法
#! /usr/bin/python # -*- encoding: utf-8 -*- import urllib import sys import os url = "http://www.python.jp/pub/doc_jp/html-2.4.tar.bz2" try: (filename, headers) = urllib.urlretrieve(url, "/tmp/%s" % os.path.basename(url)) except IOError: print u"保存に失敗しました".encode("utf-8") sys.exit(1) urllib.urlcleanup() # キャッシュの削除 print u"ファイル名: %s".encode("utf-8") % filename print "-" * 80 print u"HTTPヘッダ:".encode("utf-8") for l in str(headers).splitlines(): print l
この例ではPythonのドキュメントの日本語訳(HTML版)を/tmp/以下に保存する。
urlretrieve()関数にはURLとローカル上に保存する場所を指定する。
戻り値のタプルの内、2番目の値はHTTPヘッダが格納される(HTTPの場合)。
URLopener系クラスを使用する方法
#! /usr/bin/python # -*- encoding: utf-8 -*- import urllib import sys import os class MyURLopener(urllib.FancyURLopener): version = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" # User-Agent: def open_unknown(self, given_url, data): print u"URLではないため、処理できません: %s".encode("utf-8") % given_url sys.exit(1) url = "http://www.python.jp/pub/doc_jp/html-2.4.tar.bz2" #url = "hoge://www.python.jp/pub/doc_jp/html-2.4.tar.bz2" opener = MyURLopener({}) try: (filename, headers) = opener.retrieve(url, "/tmp/%s" % os.path.basename(url)) except IOError: print u"取得に失敗しました".encode("utf-8") sys.exit(1) opener.cleanup() # キャッシュの削除 print u"ファイル名: %s".encode("utf-8") % filename print "-" * 80 print u"HTTPヘッダ:".encode("utf-8") for l in str(headers).splitlines(): print l
FancyURLopenerもしくはURLopenerクラス、およびそれらの子クラスを使用する方法では、メンバ関数retrieve()を使用する。
関連記事:
- Webページの内容を開いて処理を行う
- urllibでダウンロードしたファイルのタイムスタンプをサーバ上の最終更新日時に合わせる
- urllibのダウンロードで進行状況を表示、キャッシュをせずに直接ファイルに保存
参考URL: