Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 12, 2012 17:46:49

true
Зарегистрирован: 2012-08-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать архив, если время файла изменено...

Подскажите пожалуйста:
1) как скачать файл через HTTP, с учетом если локальная его копия не изменилась - то не качать
аналог wget -N
2) как скачать файл через HTTP используя логин и пароль, аналог wget –http-user=
3) как скачать файл с FTP используя маску в имени файла, через wget я делал как wget … ftp/server.com/file-1*.zip

Думаю ответы на эти вопросы будут полезны не только мне, но и другим новичкам! Большое спасибо!

Офлайн

#2 Дек. 13, 2012 01:46:19

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Скачать архив, если время файла изменено...

true
Если вам решать конкретную задачу, то походу будет проще из питона вызывать wget ( через модуль subprocess), иначе по каждому вопросу может получится достаточно объемный вопрос.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 13, 2012 07:19:32

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Скачать архив, если время файла изменено...

Согласен с JOHN_16, но можно и самому написать. С использованием requests:
1) Упрощено, без обработки ошибок:

import email.utils
import os
import datetime
import shutil
import requests
 
def parse_datetime(text):
    dtz = email.utils.parsedate_tz(text)
    dt = datetime.datetime(*dtz[:6])
    if dtz[9]:  # utc offset
        dt += datetime.timedelta(hours=dtz[9])
    return dt
 
def download_if_modified(url, filename):
    resp = requests.get(url, prefetch=False)
    need_to_download = True
    if os.path.exists(filename):
        urldate = parse_datetime(resp.headers['last-modified'])
        filedate = datetime.datetime.utcfromtimestamp(os.path.getmtime(filename))
        need_to_download = urldate > filedate
    if need_to_download:
        with open(filename, "wb") as fp:
            shutil.copyfileobj(resp.raw, fp)
    return need_to_download
         
download_if_modified('http://python.su/static/images/logo.gif', 'logo.gif')
download_if_modified('http://yandex.st/www/1.400/yaru/i/logo.png', 'logo.png')
2) http://docs.python-requests.org/en/latest/user/quickstart/#basic-authentication

3) http://docs.python.org/2/library/ftplib.html + http://docs.python.org/2/library/fnmatch.html

Отредактировано reclosedev (Дек. 13, 2012 07:33:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version