You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从XML feed中导出并批量下载全部JPG格式图片

XML Feed 图片批量下载实现方案

下面提供两种可直接落地的方案,适配不同使用场景:

方案1:Python 实现(适配全平台,容错性强,适合新手)

适合需要自定义逻辑(比如重命名、异常重试、进度展示)的场景,8000张图片的处理压力很小。

前置依赖安装

执行命令安装所需库:

pip install lxml requests tqdm

参考代码

import os
import time
from lxml import etree
import requests
from tqdm import tqdm

# 配置项
XML_PATH = "你的feed文件路径.xml"
SAVE_DIR = "./downloaded_images"
REQUEST_INTERVAL = 0.2  # 请求间隔,单位秒,避免触发反爬
MAX_RETRY = 3

os.makedirs(SAVE_DIR, exist_ok=True)

# 解析XML提取所有图片链接
tree = etree.parse(XML_PATH)
img_urls = tree.xpath("//IMGURL/text()")
# 清洗CDATA里的链接,过滤出JPG格式
clean_urls = []
for url in img_urls:
    stripped = url.strip()
    if stripped.lower().endswith(".jpg"):
        clean_urls.append(stripped)
print(f"共提取到{len(clean_urls)}张JPG图片")

# 批量下载
fail_list = []
for url in tqdm(clean_urls, desc="下载进度"):
    file_name = url.split("/")[-1]
    save_path = os.path.join(SAVE_DIR, file_name)
    # 跳过已下载的文件
    if os.path.exists(save_path):
        continue
    # 重试逻辑
    success = False
    for _ in range(MAX_RETRY):
        try:
            resp = requests.get(url, timeout=10)
            if resp.status_code == 200:
                with open(save_path, "wb") as f:
                    f.write(resp.content)
                success = True
                break
        except Exception as e:
            time.sleep(1)
    if not success:
        fail_list.append(url)
    time.sleep(REQUEST_INTERVAL)

# 输出失败的链接方便后续重试
if fail_list:
    print(f"以下{len(fail_list)}张图片下载失败,可单独重试:")
    for u in fail_list:
        print(u)

方案2:Shell 命令行实现(适配Linux/macOS,无需额外编程环境)

适合不想写代码、环境本身支持shell命令的场景,操作更快捷。

  1. 第一步提取所有JPG链接存为列表文件
# 用xmllint解析XML提取IMGURL内容,过滤出JPG链接
xmllint --xpath '//IMGURL/text()' 你的feed文件路径.xml | grep -oE 'https?://[^[:space:]]+\.jpg' > img_urls.txt
  1. 第二步批量下载所有图片
# 用wget批量下载,自动跳过重复、失败重试、设置请求间隔
wget -i img_urls.txt -P ./downloaded_images/ --wait=0.2 --random-wait --tries=3 --no-clobber

参数说明:

  • -i img_urls.txt:从指定文件读取下载链接
  • -P ./downloaded_images/:指定图片保存目录
  • --wait=0.2:请求间隔0.2秒,避免触发反爬
  • --tries=3:单张图片最多重试3次
  • --no-clobber:跳过已下载的文件,避免重复下载浪费带宽

通用注意事项

  • 首次运行可以先从提取到的链接里挑10个测试,确认解析逻辑、下载路径、图片完整性都没问题再跑全量任务
  • 如果XML文件大小超过1G,Python解析建议用etree.iterparse渐进式加载,避免一次性加载整个文件导致内存溢出
  • 下载失败的链接可以单独整理后再次执行下载,不需要全量重新跑

内容的提问来源于stack exchange,提问作者hajdy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:01