Прежде чем я начну писать свое собственное приложение для этого, возможно, уже есть лучшее решение проблемы:

Мне нужно каждый день проверять HTTP-сервер для загрузки и обработки новых файлов. В основном это zip-файлы, которые необходимо извлечь.

Старые файлы удаляются однажды, а новые загружаются несколько раз в день. Я не хочу обрабатывать файл дважды.

Мое текущее решение - сохранить все файлы локально и использовать wget с опциями -nc , которые вызываются cronjob два раза в день:

wget -nc -t 10 -o wget.log -r -l 1 --no-parent --reject "index.html*" http://myserver/

Теперь я могу проанализировать файл журнала, получить все новые загруженные файлы и обработать их:

grep saved wget.log | awk '{ print $6}' # generate a list of downloaded files

Но я буду накапливать на диске кучу файлов, которые мне не нужны. Итак, мне нужна база данных для хранения уже загруженных файлов и проверки для каждого файла, если он уже был обработан?

1 ответ1

0

Я написал короткий сценарий для зеркалирования сервера и сохранения имен файлов в базе данных.

Вы также можете запросить хеши md5, например, если имя файла может быть дубликатом

import urllib.request as urll
import re
import shelve
import hashlib
import time

res = urll.urlopen(url)

html = res.read()

files = re.findall('<a href="([^"]+)">', str(html))[1:]

db = shelve.open('dl.shelve')

print(files)

for file in files:
    if file not in db:
        print("Downloadling %s..." %file)
        res = urll.urlopen(url + "" + file)
        bytes = res.read()
        md5 = hashlib.md5(bytes).hexdigest()

        with open("dl\\"+file, 'wb') as f:
            f.write(bytes)

        print((time.time(), len(bytes), md5))
        db[file] = (time.time(), len(bytes), md5)

db.close()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .