Загрузка файлов с http-сервера в python

Используя urllib2, мы можем получить ответ HTTP с веб-сервера. Если этот сервер просто содержит список файлов, мы можем разбирать файлы и загружать их по отдельности. Тем не менее, я не уверен, что самый простой, самый pythonic способ проанализировать файлы.

Когда вы получаете полный ответ HTTP из списка общих файловых серверов, используя метод urlopib () urllib2, как мы можем аккуратно загрузить каждый файл?

7 Solutions collect form web for “Загрузка файлов с http-сервера в python”

Urllib2 может быть в порядке, чтобы получить список файлов. Для загрузки большого количества двоичных файлов PycURL http://pycurl.sourceforge.net/ – лучший выбор. Это работает для моего файлового сервера на базе IIS:

import re import urllib2 import pycurl url = "http://server.domain/" path = "path/" pattern = '<A HREF="/%s.*?">(.*?)</A>' % path response = urllib2.urlopen(url+path).read() for filename in re.findall(pattern, response): fp = open(filename, "wb") curl = pycurl.Curl() curl.setopt(pycurl.URL, url+path+filename) curl.setopt(pycurl.WRITEDATA, fp) curl.perform() curl.close() fp.close() 

Вы можете использовать urllib.urlretrieve (в Python 3.x: urllib.request.urlretrieve):

 import urllib urllib.urlretrieve('http://site.com/', filename='filez.txt') 

Это должно быть работа 🙂

и это функция, которая может делать то же самое (используя urllib):

 def download(url): webFile = urllib.urlopen(url) localFile = open(url.split('/')[-1], 'w') localFile.write(webFile.read()) webFile.close() localFile.close() 

Можете ли вы гарантировать, что запрашиваемый URL-адрес – это список каталогов? Если да, можете ли вы гарантировать формат списка каталогов?

Если это так, вы можете использовать lxml для анализа возвращаемого документа и поиска всех элементов, которые содержат путь к файлу, а затем перебирать эти элементы и загружать каждый файл.

Вот непроверенное решение:

 import urllib2 response = urllib2.urlopen('http://server.com/file.txt') urls = response.read().replace('\r', '').split('\n') for file in urls: print 'Downloading ' + file response = urllib2.urlopen(file) handle = open(file, 'w') handle.write(response.read()) handle.close() 

Это непроверено, и, вероятно, это не сработает. Предполагается, что у вас есть фактический список файлов внутри другого файла. Удачи!

  1. Загрузите индексный файл

    Если это действительно огромно, возможно, стоит прочитать кусок за раз; в противном случае, вероятно, проще просто захватить все это в память.

  2. Извлеките список файлов для получения

    Если в списке есть xml или html, используйте соответствующий синтаксический анализатор; else, если требуется много строковой обработки, используйте regex; иначе используйте простые строковые методы.

    Опять же, вы можете разобрать его все-на-один или постепенно. Постепенно несколько более эффективно и элегантно, но если вы не обрабатываете несколько десятков тысяч строк, это, вероятно, не критично.

  3. Для каждого файла загрузите его и сохраните в файл.

    Если вы хотите попытаться ускорить работу, попробуйте запустить несколько потоков загрузки;

    другой (значительно более быстрый) подход может состоять в том, чтобы делегировать работу в выделенную программу загрузчика, такую ​​как Aria2 http://aria2.sourceforge.net/, – отметить, что Aria2 можно запускать как службу и управлять через XMLRPC, см. http: // sourceforge .net / приложения / ПРОФ / aria2 / вики / XmlrpcInterface # InteractWitharia2UsingPython

Мое предложение было бы использовать BeautifulSoup (который является парсером HTML / XML), чтобы проанализировать страницу для списка файлов. Тогда pycURL определенно пригодится.

Еще один способ, когда у вас есть список файлов, – использовать urllib.urlretrieve таким же образом, как wget, чтобы просто загрузить файл в папку на вашей файловой системе.

Это недопустимый способ, но хотя он работает

 fPointer = open(picName, 'wb') self.curl.setopt(self.curl.WRITEFUNCTION, fPointer.write) urllib.urlretrieve(link, picName) - correct way 
  • Автоматизация запросов на проверку с помощью ReviewBoard и Mercurial с использованием Python-перехватчиков
  • Javascript (и рендеринг HTML) без графического интерфейса для автоматизации?
  • Как я могу войти на сайт с Python?
  • Selenium python проверяет каждые 10 секунд
  • Динамические хосты и параллельные задачи с библиотекой Fabric
  • Как сделать механизацию не с помощью форм на этой странице?
  • Python Selenium Alert - запрашивать имя пользователя и пароль не работает
  • В Сикули, как найти и щелкнуть минимум 3 одинаковых изображения?
  • программное обеспечение / инструмент для автоматизации приложений
  • Как сделать python urllib2 следовать за перенастройкой и сохранить метод post
  • Python получает значение пикселя экрана в OS X
  •  
    Interesting Posts for Van-Lav

    Python – получить текущее время в формате numpy datetime64

    Почему я не могу создать дефолт по умолчанию, заказанный dict, наследуя OrderedDict и defaultdict?

    __init__ вызывается несколько раз с этой реализацией Singleton? (Python)

    В CMD «python» запускает Python 3.3, «py» запускает Python 2.7, как мне это изменить?

    Обрезать изображение с помощью PIL в python

    найти минимальный индекс заданного значения в предварительно отсортированном массиве

    Функция Is_prime через regex в python (от perl)

    Каков предпочтительный способ создания набора из нескольких списков в Python

    Как определить макс. глубина рекурсии превысила исключение в Python?

    Как люди обычно реализуют jsonp в python?

    Передача аргументов в os.system

    Распространять предварительно скомпилированный модуль расширения python с distutils

    Пожалуйста, укажите мне (хорошую) документацию о макетах QT для разработки плазмы

    Есть ли поддержка файла проекта, например, npm / package.json для пипса Python?

    matplotlib: оверлейные сюжеты с разной шкалой?

    Python - лучший язык программирования в мире.