Two part question. I am trying to download multiple archived Cory Doctorow podcasts from the internet archive. The old one's that do not come into my iTunes feed. I have written the script but the downloaded files are not properly formatted.
两部分问题。我正在尝试从互联网档案中下载多个存档的Cory Doctorow播客。旧的不会进入我的iTunes提要。我编写了脚本,但下载的文件格式不正确。
Q1 - What do I change to download the zip mp3 files? Q2 - What is a better way to pass the variables into URL?
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
This script was adapted from here
这个脚本是从这里改编的
2 个解决方案
#1
48
Here's how I'd deal with the url building and downloading. I'm making sure to name the file as the basename of the url (the last bit after the trailing slash) and I'm also using the with
clause for opening the file to write to. This uses a ContextManager which is nice because it will close that file when the block exits. In addition, I use a template to build the string for the url. urlopen
doesn't need a request object, just a string.
这是我如何处理网址建设和下载。我确保将文件命名为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()
#2
2
An older solution on SO along the lines of what you want:
根据您的需要,在SO上使用较旧的解决方案:
-
download a zip file to a local drive and extract all files to a destination folder using python 2.5
将zip文件下载到本地驱动器,并使用python 2.5将所有文件解压缩到目标文件夹
-
Python和urllib
#1
48
Here's how I'd deal with the url building and downloading. I'm making sure to name the file as the basename of the url (the last bit after the trailing slash) and I'm also using the with
clause for opening the file to write to. This uses a ContextManager which is nice because it will close that file when the block exits. In addition, I use a template to build the string for the url. urlopen
doesn't need a request object, just a string.
这是我如何处理网址建设和下载。我确保将文件命名为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()
#2
2
An older solution on SO along the lines of what you want:
根据您的需要,在SO上使用较旧的解决方案:
-
download a zip file to a local drive and extract all files to a destination folder using python 2.5
将zip文件下载到本地驱动器,并使用python 2.5将所有文件解压缩到目标文件夹
-
Python和urllib