首页 > 解决方案 > 如何使用请求下载文件

问题描述

我正在使用请求库从 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错误。但有时会正确下载整个文件。

我在没有流式传输的情况下尝试了相同的操作,甚至导致同样的问题。

如何检查所有块是否已正确下载。

标签: pythondownloadpython-requestszipfile

解决方案


也许这有效:

r = requests.get(link)  
with open(os.path.join(download_path, file_name), 'wb') as fd:
    fd.write(r.content)

推荐阅读