在写Python爬虫时,经常会有下载文件的需求,比如我们可以通过以下代码下载图片或者视频
import requests
def request_chunk_download_image(image_url, image_path):
res = requests.get(image_url)
with open(image_path, 'wb') as f:
for chunk in res.iter_content(chunk_size=1024):
f.write(chunk)
if __name__ == '__main__':
image_url = 'https://img-blog.csdnimg.cn/20200924162143340.jpg'
image_path = './image.jpg'
request_chunk_download_image(image_url, image_path)
但是上述代码有一个问题,如果下载一个图片出现错误或者异常,就会导致整个程序退出,然后导致对这个网站的爬取出现问题,可能这个问题时由于短暂的网络原因所导致的,所以我们可以对上述代码进行一个鲁棒性的修改,就是无论如何我们都必须保证程序不会因为异常所退出,然后保证图片或者视频在下载出错的时候可以重新下载,直到下载完成,修改后的代码如下。
import requests
def request_chunk_download_image(image_url, image_path):
try:
res = requests.get(image_url)
with open(image_path, 'wb') as f:
for chunk in res.iter_content(chunk_size=1024):
f.write(chunk)
except requests.exceptions.ConnectionError:
print(f"下载{image_url}失败,尝试重新下载")
request_chunk_download_image(image_url, image_path)
except requests.exceptions.Timeout:
print(f"下载{image_url}失败,尝试重新下载")
request_chunk_download_image(image_url, image_path)
if __name__ == '__main__':
image_url = 'https://img-blog.csdnimg.cn/20200924162143340.jpg'
image_path = './image.jpg'
request_chunk_download_image(image_url, image_path)
其实就是通过一个简单的try...catch语句块捕捉下载异常,当出现网络连接问题或者超时的时候就会重新执行函数,直到下载文件完成。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Python爬虫 – 下载文件出错重新下载,直到文件下载完成
原文链接:https://www.stubbornhuang.com/2653/
发布于:2023年06月10日 14:12:42
修改于:2023年06月10日 14:12:42
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50