Как загрузить zip-файл в python с помощью urllib2?

Два вопроса. Я пытаюсь загрузить несколько архивных подкастов Cory Doctorow из интернет-архива. Старые, которые не входят в мой канал iTunes. Я написал сценарий, но загруженные файлы не были правильно отформатированы.

Q1 – Что я могу изменить для загрузки zip-файлов? 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 

Этот сценарий был адаптирован здесь

2 Solutions collect form web for “Как загрузить zip-файл в python с помощью urllib2?”

Вот как я занимаюсь созданием и загрузкой 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

  • Python и urllib

  • Я загружаю файл, используя Python urllib2. Как проверить размер файла?
  • загрузка многопоточного файла в python и обновление в оболочке с возможностью загрузки
  • Базовая аутентификация HTTP не работает с urllib2 в python
  • python urllib2 timing
  • Как решить проблему утечки памяти Python при использовании urrlib2?
  • Python: URLError: <ошибка urlopen
  • Как получить значение скрытого ввода с помощью python?
  • закрытие файлов, правильно открываемых с помощью urllib2.urlopen ()
  • Python - лучший язык программирования в мире.