python - 如何使用请求下载文件
问题描述
我正在使用请求库从 URL 下载文件。这是我的代码
for tag in soup.find_all('a'):
if '.zip' in str(tag):
file_name = str(tag).strip().split('>')[-2].split('<')[0]
link = link_name+tag.get('href')
r = requests.get(link, stream=True)
with open(os.path.join(download_path, file_name), 'wb') as fd:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
fd.write(chunk)
然后我使用此代码解压缩文件
unzip_path = os.path.join(download_path, file_name.split('.')[0])
with zipfile.ZipFile(os.path.join(download_path, file_name), 'r') as zip_ref:
zip_ref.extractall(unzip_path)
此代码查看提供的页面中是否有 zip 文件,然后将压缩文件下载到目录中。然后它将使用zipFile
库解压缩文件。
这段代码的问题是有时下载不完整。因此,例如,如果压缩文件的长度为 312KB,则只会下载其中的一部分。然后我得到一个BadZipFile
错误。但有时会正确下载整个文件。
我在没有流式传输的情况下尝试了相同的操作,甚至导致同样的问题。
如何检查所有块是否已正确下载。
解决方案
也许这有效:
r = requests.get(link)
with open(os.path.join(download_path, file_name), 'wb') as fd:
fd.write(r.content)
推荐阅读
- mysql - 无法从变量中插入值到表中
- python - Python没有在while循环中更新
- java - 我怎样才能得到这个 Junit 测试的方法?
- java - 如何在 DTO 的帮助下在 Android 中解析这个
- batch-file - 显示由 reg export 生成的 .txt 文件中的文本
- python - 在函数的类之外使用静态 NamedTuples 变量
- c# - 如何将 .net 框架数据层引用到 .net 核心控制台应用程序
- visual-studio-code - 获取变量声明的位置
- python - configparser.NoSectionError:No section:'XXX'
- javascript - Error: Node.js module defined by file index.js is expected to export function named xxxx