首页 > 其他分享 >从指定的CSV文件中读取图片URL,批量下载这些图片到指定的目录

从指定的CSV文件中读取图片URL,批量下载这些图片到指定的目录

时间:2024-07-01 19:58:20浏览次数:3  
标签:URL 指定 重试 requests CSV 下载 图片

  1. 导入必要的库:包括pandas用于处理CSV文件,requests用于发送网络请求,以及ostime等进行文件系统操作和可能的时间控制。

  2. 设置路径:指定了CSV文件的位置和图片将要保存的目录。如果保存目录不存在,脚本会自动创建。

  3. 配置HTTP请求会话:使用requests.Session()建立会话,并通过RetryHTTPAdapter添加了重试逻辑,以便在网络问题导致的失败后自动重试下载。这样提高了下载过程的健壮性。

  4. 定义请求头:模拟浏览器的User-Agent字符串,某些网站可能需要特定的User-Agent来允许访问或下载。

  5. 遍历CSV文件并下载图片

    • 对CSV中的每一行,提取图片URL。
    • 使用URL的最后一部分作为图片的文件名,确保唯一性和可读性。
    • 在尝试下载前,检查文件是否已存在,避免重复下载。
    • 使用配置好的会话发送GET请求,并设置超时避免长时间阻塞。
    • 成功下载后,图片被写入到本地文件系统,并更新下载计数。
    • 如果遇到任何请求异常或非200状态码,会打印错误信息并继续处理下一行。
  6. 最终统计:完成所有URL的处理后,打印出成功下载的图片总数。

    import pandas as pd
    import requests
    import os
    import time
    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry
    
    # 设置CSV文件路径和保存图片的目录
    csv_file_path = 'D:\\Desktop\\image\\下载.csv'  # 你的CSV文件路径
    save_dir = 'D:\\a\\Desktop\\image\\images'  # 保存图片的目录路径
    
    # 检查保存目录是否存在,不存在则创建
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    
    # 读取CSV文件
    df = pd.read_csv(csv_file_path)
    
    # 准备HTTP会话,设置重试策略
    session = requests.Session()
    retries = Retry(total=5,  # 设置最大重试次数为5
                    backoff_factor=0.1,  # 重试间隔时间的因子,重试间的实际时间会因此递增
                    status_forcelist=[500, 502, 503, 504])  # 设置应该重试的HTTP状态码
    session.mount('http://', HTTPAdapter(max_retries=retries))
    session.mount('https://', HTTPAdapter(max_retries=retries))
    
    # 设置请求头信息,模拟浏览器行为
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.0.0 Safari/537.36'
    }
    
    # 记录下载的图片数量
    downloaded_count = 0
    
    # 遍历CSV中的每一行,下载图片
    for index, row in df.iterrows():
        pic_url = row['picUrl']  # 获取图片的URL
        filename = os.path.join(save_dir, pic_url.split('/')[-1])  # 根据URL生成本地文件名和路径
    
        if os.path.exists(filename):
            print(f"文件 {filename} 已存在,跳过下载。")
            continue
    
        try:
            # 发送HTTP请求获取图片,设置请求头并允许重试
            response = session.get(pic_url, headers=headers, stream=True, timeout=10)  # 设置超时时间避免长时间等待无响应的服务器
    
            # 检查请求是否成功
            if response.status_code == 200:
                with open(filename, 'wb') as f:
                    for chunk in response.iter_content(chunk_size=8192):
                        f.write(chunk)
                downloaded_count += 1  # 每成功下载一个图片,增加计数
                print(f"图片已保存到: {filename}")
            else:
                print(f"无法下载图片: {pic_url},状态码: {response.status_code}")
        except requests.exceptions.RequestException as e:
            print(f"下载图片时出错(第{index+1}行): {e}")
    
    # 打印下载的图片数量
    print(f"总共下载了 {downloaded_count} 张图片。")

标签:URL,指定,重试,requests,CSV,下载,图片
From: https://blog.csdn.net/weixin_45339016/article/details/140041338

相关文章

  • java 将jpg格式图片提出成txt文件 。
    importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.*;publicclassImageConvertTool{privatestaticStringimagePath,txtPath;privatestaticintimageHeight,imageWidth;privatestaticStringreplaceString=......
  • springboot-javax.validation检查是否属于指定的值
    引入依赖:<!--jsr303--><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><!--hibernatevalidator--><depen......
  • 妙笔生词智能作词软件是否可以模仿指定歌词的字数和段落来写歌词?
    可以的,我们用张学友的一首很火的老歌《偷心》为例,我们根据《偷心》这首歌的字数和句数,以及风格来仿写一首歌词,首先风格,押韵,都采用默认选择,然后用《偷心》歌词作为引导语,也通过歌词用来做格式,然后点击生成歌词按钮,等待片刻,就可以仿写出一首字数和句数相同的一首歌词,我们看看效果,得......
  • HTML5+CSS3+JS小实例:图片九宫格
    实例:图片九宫格技术栈:HTML+CSS+JS效果:源码:【HTML】<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • 【打卡】002 p2 CIFAR10彩色图片识别
    打卡~555我的环境:●语言环境:Python●编译器:jupyternotebook●深度学习环境:Pytorch>-**......
  • 新版一键AI视频图片换脸神器来了!目前最强的AI视频换脸工具Swapface!
    之前发过一款AI换脸工具,可惜部署门槛太高,有没有换头换脸的AI工具?今天就给你们安排到家!SwapfaceAI工具一键开箱包‍(一键整合包添加下方领取~)它使用先进的人工智能和计算机视觉技术,可以在几秒内为你的视频生成逼真的面部替换效果。无需任何复杂的参数设置,你只需要上......
  • Golang:go-querystring将struct编码为URL查询参数的库
    Golang:go-querystring将struct编码为URL查询参数的库原创 吃个大西瓜 CodingBigTree 2024-05-0908:30 北京go-querystringisaGolibraryforencodingstructsintoURLqueryparameters.译文:go-querystring将struct编码为URL查询参数的Golang库文档ht......
  • RedirectView 你不知道的 URL重定向原理
    肖哥弹架构跟大家“弹弹”RedirectView业务使用与功能设计欢迎点赞,点赞,点赞。关注本人的公众号Solomon肖哥弹架构获取更多精彩内容RedirectView来实现URL重定向策略。这种技术可以用于优化网站结构、处理页面迁移或实现安全的登录跳转。类结构设计业务说明:大型......
  • postgresql pg_dump备份参数,不排除指定表名原因
    最近用pg_dump备份数据库搭建测试环境,想排除某些数据量大的表,但从备份出的bmp文件发现并没有排除指定表名,多次尝试后发现原因起初我的指令是这样的(错误):pg_dump-h10.***.***.**-p5432-Upostgres-ddatabase-nschema--exclude-table='*_copy'--section=data>/u01/bac......
  • C++文件路径处理3 - 判断指定目录的文件类型(文件夹|普通文件|软连接)
    1.关键词2.filetype.h3.filesystem.h4.filesystem_unix.cpp5.filesystem_win.cpp6.filepath.h7.filepath.cpp8.测试代码9.运行结果10.源码地址1.关键词关键词:C++文件路径处理文件夹普通文件软连接跨平台应用场景:根据指定的目录路径,判断该目录的文......