amemv-crawler
amemv-crawler copied to clipboard
判断是否下载过逻辑是不是有问题?
我有个定时任务每天定时跑一遍这个脚本.发现绝大部分已经下载过的视频仍然需要重新下载一遍.看源码debug发现,getRemoteSize和getLocalSize基本大小都不匹配. 换成直接判断本地是否存在同名文件且size > 0 可以解决这个问题吗?
这样改下载中断的也会当作正常下载的吧 感觉下载过程中应该保存成临时文件(比如特殊的后缀)下载完成后再重命名成正常的.mp4
这样改下载中断的也会当作正常下载的吧 感觉下载过程中应该保存成临时文件(比如特殊的后缀)下载完成后再重命名成正常的.mp4
都可以 在下载的地方做个异常捕捉 检测到异常清空或者删除中断的文件也行
通过content-length头获取远程文件大小 是不对的,视频肯定放在cdn上,cdn服务器肯定gzip压缩了,大小肯定跟本地不一样。oh shit
我感觉最好写个 布隆过滤url ,或者json文件存储 视频的uir ,下载前判断uir,一个用户一个json文件 足够了
@liupeng328 把url存下来应该可行。我现在就就是保存url来判断了。试了一个月暂时没有问题
@icesunx 代码发我一份吧,您肯定分析过这个代码了吧?您有没有加注释? 我不是做python开发的,改起来还是比较费劲的,您修改的代码可以发我一份吗?给我个github连接就行
@icesunx 代码发我一份吧,您肯定分析过这个代码了吧?您有没有加注释? 我不是做python开发的,改起来还是比较费劲的,您修改的代码可以发我一份吗?给我个github连接就行
if os.path.isfile(file_path):
print("%s 已经下载过了 \n" % file_name)
#remoteSize = getRemoteFileSize(medium_url)
#localSize = os.path.getsize(file_path)
#if remoteSize == localSize:
return
我这里再本地获取到文件我就判断已存在了,不会去继续下载
这几天我看了下python的语法,解决了这个问题: 我实现了两种方式:
- 判断本地文件存在,则放弃下载
file_path = os.path.join(target_folder, file_name)
if os.path.isfile(file_path):
print(file_name+" 已经爬取过了,文件保存在 "+file_path+" 放弃爬取")
return
- 下载后记录videoid到一个json文件,防止重复爬取
# 防止重复下载 记录视频id到json文件版
# file = open('videoids.json', 'r')
# js = file.read()
# VIDEOID_DICT = json.loads(js)
# # print(VIDEOID)
# file.close()
# 解析medium_url中的 video_id
# parses = parse.parse_qs(parse.urlparse(medium_url).query)
# VIDEO_ID = parses["video_id"][0]
# if VIDEO_ID in VIDEOID_DICT:
# print("重复爬取,放弃"+VIDEO_ID)
# return
# # 定时记录已经下载的文件
# def saveVideoids():
# while True:
# print("定时记录已经下载的视频,防止重复爬取")
# js = json.dumps(VIDEOID_DICT)
# fileObject = open('videoids.json', 'w')
# fileObject.write(js)
# fileObject.close()
# time.sleep(10)
# threading.Timer(10, saveVideoids).start()
另外加我qq群:317896269