每日一问,问问有没有大佬知道如何批量下载类似这个网站的照片

四级用户 skk4120356 1月前 2319

https://repository.duke.edu/dc/gamble?f%5Bseries_ssim%5D%5B%5D=Sojourn%2C+1908%3A+China

手动一个一个下载太慢了

360截图20250801110943476.jpg


上一篇:老黄翻车了!
下一篇:这EA比卡婊都会炒冷饭
最新回复 (34)
  • 五级用户 wenbin5243 1月前
    0 2
    看看图片命名有没有规律,有就用迅雷批量下来,没有就找个爬虫脚本改一改
  • 四级用户 skk4120356 1月前
    0 3
    wenbin5243 看看图片命名有没有规律,有就用迅雷批量下来,没有就找个爬虫脚本改一改
    没有规律,都是乱码,爬虫脚本对我来说太高端了
  • 五级用户 vDtv3vNZoE5d 1月前
    0 4

    甘博摄影集,zlibrary直接搜,216MB,质量应该和网站上的差不多,我下载了几张,原图都是几百KB。

    ---

    看了下,下载的epub里的图片是压缩过的。

  • 四级用户 woyaodl 1月前
    1 5

    TinyTask录制操作,重复运行

  • 五级用户 vDtv3vNZoE5d 1月前
    1 6

    让Gemini写了个爬虫,试了下可以下载,用图片描述来命名下载的图片。

    将下面的代码保存到 download.py

    命令行中输入 Python3 download.py 

    按回车下载,会自动创建文件夹。

    (需要安装python3,命令行中输入 pip3 install requests,lxml 安装依赖库)


    import requests
    from lxml import html
    import os
    import time
    import re
    
    # 定义错误日志文件的名称
    ERROR_LOG_FILE = "error.md"
    
    def download_images_with_combined_names():
        """
        爬取 Duke 大学仓库中的 Gamble 系列图片,并使用“页码_序号_图片描述”格式命名。
        下载失败时,将信息记录到 error.md 文件中。
        """
        # 主页基础 URL,在此基础上添加分页参数
        base_url = "https://repository.duke.edu/dc/gamble?f%5Bcommon_model_name_ssi%5D%5B%5D=Item"
        # 本地保存图片的文件夹
        download_folder = "gamble_combined_images"
    
        # 创建保存图片的文件夹
        if not os.path.exists(download_folder):
            os.makedirs(download_folder)
            print(f"创建了文件夹: {download_folder}")
    
        # 遍历所有250页
        total_pages = 250
        for page_num in range(1, total_pages + 1):
            page_url = f"{base_url}&page={page_num}"
            print(f"\n--- 正在处理第 {page_num} 页, URL: {page_url} ---")
    
            try:
                # 获取当前分页内容
                response = requests.get(page_url, timeout=10)
                response.raise_for_status()  # 检查请求是否成功
            except requests.exceptions.RequestException as e:
                print(f"获取第 {page_num} 页失败: {e}")
                continue
    
            # 解析分页 HTML
            tree = html.fromstring(response.content)
            image_blocks = tree.xpath('//div[contains(@class, "blacklight-image")]')
    
            if not image_blocks:
                print(f"第 {page_num} 页未找到任何图片信息块。")
                continue
    
            for i, block in enumerate(image_blocks, 1):
                # 找到缩略图链接
                thumbnail_link = block.xpath('.//img[contains(@class, "img-thumbnail")]/@src')
                if not thumbnail_link:
                    continue
                thumbnail_link = thumbnail_link[0]
    
                # 格式化页码和序号
                page_str = f"{page_num:03d}"
                image_str = f"{i:02d}"
    
                # 查找图片描述
                image_description = block.xpath('.//a[@itemprop="name"]/text()')
                
                # --- 生成最终文件名 ---
                if image_description:
                    base_filename = image_description[0].strip()
                    base_filename = re.sub(r'[\\/:*?"<>|]', '', base_filename)
                    base_filename = base_filename[:100].strip()
                    final_filename = f"{page_str}_{image_str}_{base_filename}.jpg"
                else:
                    final_filename = f"{page_str}_{image_str}.jpg"
                # --- 文件名生成结束 ---
    
                # 将缩略图链接替换为原图链接
                if '!350,350' in thumbnail_link:
                    high_res_link = thumbnail_link.replace('!350,350', 'full')
                else:
                    continue
                
                full_download_url = f"https://repository.duke.edu{high_res_link}"
                file_path = os.path.join(download_folder, final_filename)
                
                print(f"  > 正在处理第 {i} 个图片,文件名: {final_filename}")
    
                # 下载图片
                try:
                    if not os.path.exists(file_path):
                        image_data = requests.get(full_download_url, stream=True, timeout=30)
                        image_data.raise_for_status()
                        
                        with open(file_path, 'wb') as f:
                            for chunk in image_data.iter_content(chunk_size=8192):
                                f.write(chunk)
                        print(f"  > 下载成功: {final_filename}")
                    else:
                        print(f"  > 文件已存在,跳过: {final_filename}")
                except requests.exceptions.RequestException as e:
                    # --- 核心修改:下载失败时记录日志 ---
                    print(f"  > 下载失败: {e}")
                    log_entry = f"- 序号: {page_str}_{image_str}, 描述: '{image_description[0].strip() if image_description else '无'}' 下载链接: {full_download_url}\n"
                    with open(ERROR_LOG_FILE, 'a', encoding='utf-8') as log_file:
                        log_file.write(log_entry)
                    print(f"  > 错误信息已记录到 {ERROR_LOG_FILE}")
                    # --- 记录日志结束 ---
    
                time.sleep(0.5)
    
            print(f"\n第 {page_num} 页处理完毕。")
            time.sleep(2)
    
        print("\n所有图片处理完毕。")
        print(f"所有下载失败的记录已保存在 {ERROR_LOG_FILE} 文件中。")
    
    if __name__ == "__main__":
        download_images_with_combined_names()
    
  • 五级用户 vDtv3vNZoE5d 1月前
    0 7

    sc_2025-08-01 11.47.48.png

  • 四级用户 skk4120356 1月前
    0 8
    vDtv3vNZoE5d
    厉害了大佬,历史贴都打分了
  • 四级用户 skk4120356 27天前
    0 9
    vDtv3vNZoE5d 让Gemini写了个爬虫,试了下可以下载,用图片描述来命名下载的图片。将下面的代码保存到&nbsp;download.py命令行中输入 Python3 download.py&nbsp ...
    大佬,这个PC也能用吗
  • 五级用户 vDtv3vNZoE5d 25天前
    0 10
    skk4120356 大佬,这个PC也能用吗
    能用,安装好Python3和依赖库,在CMD里输命令运行。或者你直接在书格网搜,我看了一些图片才想起来以前在书格网下载过PDF版,那里的也是从这个网站里下载整合的。
  • 四级用户 skk4120356 25天前
    0 11
    vDtv3vNZoE5d 能用,安装好Python3和依赖库,在CMD里输命令运行。或者你直接在书格网搜,我看了一些图片才想起来以前在书格网下载过PDF版,那里的也是从这个网站里下载整合的。
    这里一共5525张,每个网页我都拉到EXCEL里了,就是要一个一个打开来,然后再下载
  • 三级用户 小灰去哪儿 25天前
    0 12

    Downie能用么?别花钱!

    https://bbs.oldmantvg.net/thread-54642.htm

  • 五级用户 vDtv3vNZoE5d 25天前
    0 13
    skk4120356 这里一共5525张,每个网页我都拉到EXCEL里了,就是要一个一个打开来,然后再下载
    不用,网址和下载规则已经写在代码里了,直接运行就能下载。
  • 四级用户 skk4120356 25天前
    0 14
    vDtv3vNZoE5d 不用,网址和下载规则已经写在代码里了,直接运行就能下载。

    好像没有运行

    360截图20250806104802615.jpg

  • 五级用户 vDtv3vNZoE5d 25天前
    0 15
    skk4120356 vDtv3vNZoE5d 不用,网址和下载规则已经写在代码里了,直接运行就能下载。 好像没有运行
    你得在脚本文件夹里输入这个命令啊...
    在C盘新建一个文件夹gamble,把脚本放进去
    cmd中输入cd C:\gamble,按回车
    再输入python3 download.py
  • 四级用户 skk4120356 25天前
    0 16

    哈哈,没动静肯定是哪一步我没做好

    360截图20250806123157090.jpg

  • 五级用户 vDtv3vNZoE5d 25天前
    0 17
    skk4120356 哈哈,没动静肯定是哪一步我没做好
    输入python3看一下,可能是安装时没勾选添加环境变量
  • 三级用户 wxf666 25天前
    0 18
    vDtv3vNZoE5d 输入python3看一下,可能是安装时没勾选添加环境变量
    你直接爬出所有图片 URL,让他丢到迅雷下载啥的,就行了吧。。😂
  • 五级用户 vDtv3vNZoE5d 25天前
    0 19
    skk4120356 哈哈,没动静肯定是哪一步我没做好
    看一下这个:https://old.shuge.org/ebook/gamble-photographs/

    文件名:甘博的摄影集.Sidney D. Gamble Photographs.共5辑.1908-1932年
    文件格式:PDF高清
    文件夹大小:4.85G

    如果必须得是图片格式的,我可以帮你下载完打包给你。
  • 五级用户 vDtv3vNZoE5d 25天前
    0 20
    wxf666 你直接爬出所有图片 URL,让他丢到迅雷下载啥的,就行了吧。。😂
    那不如我下载了打包给他呢……
    • 老男人游戏网配套论坛
      36
        立即登录 立即注册
发新帖
本论坛禁止发布SWITCH和PS4相关资源,若有其他侵权内容,请致邮3360342659#qq.com(#替换成@)删除。