二部構成の質問。インターネットアーカイブから複数のアーカイブされたCory Doctorowポッドキャストをダウンロードしようとしています。私のiTunesフィードに含まれていない古いもの。スクリプトを書きましたが、ダウンロードしたファイルは適切にフォーマットされていません。
Q1-Zip mp3ファイルをダウンロードするために何を変更しますか? Q2-変数をURLに渡すより良い方法は何ですか?
# and the base url.
def dlfile(file_name,file_mode,base_url):
from urllib2 import Request, urlopen, URLError, HTTPError
#create the url and the request
url = base_url + file_name + mid_url + file_name + end_url
req = Request(url)
# Open the url
try:
f = urlopen(req)
print "downloading " + url
# Open our local file for writing
local_file = open(file_name, "wb" + file_mode)
#Write to our local file
local_file.write(f.read())
local_file.close()
#handle errors
except HTTPError, e:
print "HTTP Error:",e.code , url
except URLError, e:
print "URL Error:",e.reason , url
# Set the range
var_range = range(150,153)
# Iterate over image ranges
for index in var_range:
base_url = 'http://www.archive.org/download/Cory_Doctorow_Podcast_'
mid_url = '/Cory_Doctorow_Podcast_'
end_url = '_64kb_mp3.Zip'
#create file name based on known pattern
file_name = str(index)
dlfile(file_name,"wb",base_url
このスクリプトは、 here
URLの作成とダウンロードの処理方法は次のとおりです。ファイルの名前をURLのベース名(末尾のスラッシュの後の最後のビット)にして、書き込み先のファイルを開くためにwith
句も使用していることを確認しています。これは ContextManager を使用します。これは、ブロックの終了時にそのファイルを閉じるため、ニースです。さらに、テンプレートを使用してURLの文字列を作成します。 urlopen
はリクエストオブジェクトを必要とせず、文字列のみを必要とします。
import os
from urllib2 import urlopen, URLError, HTTPError
def dlfile(url):
# Open the url
try:
f = urlopen(url)
print "downloading " + url
# Open our local file for writing
with open(os.path.basename(url), "wb") as local_file:
local_file.write(f.read())
#handle errors
except HTTPError, e:
print "HTTP Error:", e.code, url
except URLError, e:
print "URL Error:", e.reason, url
def main():
# Iterate over image ranges
for index in range(150, 151):
url = ("http://www.archive.org/download/"
"Cory_Doctorow_Podcast_%d/"
"Cory_Doctorow_Podcast_%d_64kb_mp3.Zip" %
(index, index))
dlfile(url)
if __name__ == '__main__':
main()
SOの古いソリューションは、あなたが望むものに沿って:
Zipファイルをローカルドライブにダウンロードし、python 2.5 を使用してすべてのファイルを宛先フォルダーに抽出する