在写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
当前分类随机文章推荐
- Python - list与字符串str相互转换方法总结 阅读927次,点赞0次
- Python3爬虫 - requests库 阅读4065次,点赞3次
- Python - 运行YOLOv5出现AttributeError: module 'torchvision' has no attribute 'ops' 阅读2663次,点赞1次
- Python - 深度学习训练过程使用matplotlib.pyplot实时动态显示loss和acc曲线 阅读2870次,点赞0次
- Python - 列表list遍历方法总结 阅读720次,点赞0次
- Python - 使用Opencv-Python库获取本机摄像头视频并保存为视频文件 阅读2960次,点赞0次
- Python - 根据url下载图片的几种方式整理 阅读420次,点赞0次
- Python3爬虫 - requests的请求响应状态码(requests.status_code) 阅读9654次,点赞4次
- Python - opencv-python保存视频时出现Failed to load OpenH264 library: openh264-1.8.0-win64.dll错误 阅读1465次,点赞0次
- Python - argparse命令行参数解析库用法总结 阅读965次,点赞0次
全站随机文章推荐
- OpenCV - cv::VideoWriter::fourcc可支持的视频编码格式 阅读3906次,点赞0次
- 我的开源项目 - 3DPoseEstimation从2D视频中估计人物三维姿势,并生成BVH文件 阅读13246次,点赞32次
- 资源下载 - 地球编年史1-7本高清带书签PDF下载 阅读15734次,点赞21次
- C++ - 在Visual Studio中使用OpenMP加速for循环 阅读506次,点赞0次
- 网站个性化 - 添加人形时钟 honehone_clock.js 阅读3331次,点赞0次
- Python – 解决opencv-python使用cv2.imwrite()保存中文路径图片失败的问题 阅读2298次,点赞0次
- Alphapose - 在Alphapose中使用yolov3-tiny检测器大幅提升检测性能 阅读3089次,点赞0次
- C++STL容器 - std::map容器修改、元素操作总结 clear,insert,emplace,erase,swap,merge,extract,insert_or_assign等 阅读2227次,点赞0次
- Transformer - 理解Transformer必看系列之,2 Positional Encoding位置编码与Transformer编码解码过程 阅读1183次,点赞0次
- Duilib - RichEdit控件发送textchanged消息 阅读1758次,点赞0次
评论
169