python requests 检查文件是否正确下载
我正在使用 requests
库从一个网站下载一些图片。
我的代码会在下载后检查文件的大小。
下面是一个示例代码:
def download(url, store_dir):
r = requests.get(url, headers=headers, proxies=proxies)
filename = r.headers.get('content-disposition').split('=')[1]
real_length = int(r.headers.get('content-length'))
wholepath = os.path.join(store_dir, filename)
with open(wholepath, 'wb') as f:
f.write(r.content)
f.close()
if os.path.getsize(wholepath) != real_length:
print('size error')
print('status_code: %s' %r.status_code)
print('headers: %s' %r.headers)
print('url"%s' % url)
print('orgin:', r.headers['content-length'], 'now',os.path.getsize(wholepath))
self.download(url, store_dir)
但是我发现,即使 os.path.getsize(wholepath) == real_length
,有时候下载的图片文件还是会损坏。
我该怎么解决这个问题呢?
1 个回答
5
快四年了。我差点忘了这个问题,直到今天收到一个踩赞。
让我来结束这个问题:
没有完美的方法可以在没有文件哈希字符串的情况下验证文件。
不过,如果你是从网站上抓取文件,可以试着看看页面或网址上有没有看起来像md5或sha1的字符串,然后试试看。如果运气好,那就是文件的哈希值,你就可以用它来验证文件。如果运气不好,那就没办法了。