在我开始为此编写自己的应用程序之前,也许已经有更好的解决方案了:
我需要每天检查 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
我现在编写了一个简短的脚本来镜像服务器并将文件名保存在数据库中。
您还可以查询 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()