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

如何从Python数组中批量下载多个URL 已解析得到URL列表如何编写后续循环逻辑

Python 批量URL资源下载实现

以下是承接你现有代码的完整可运行实现,支持异常捕获、重复下载跳过、大文件适配:

import requests
from bs4 import BeautifulSoup as bs
import os

# 原有URL解析逻辑
r = requests.get('https://earth-info.nga.mil/index.php?dir=coordsys&action=gars-20x20-dloads')
soup = bs(r.content, 'html.parser')
files = ['https://earth-info.nga.mil/' + i['href'] for i in soup.select('area')]

# 本地存储目录配置
save_dir = './nga_resource_downloads'
os.makedirs(save_dir, exist_ok=True)

# 批量下载循环
for download_url in files:
    # 从URL中提取文件名作为本地存储文件名
    file_name = download_url.split('/')[-1]
    local_save_path = os.path.join(save_dir, file_name)

    # 跳过已下载的文件,避免重复请求
    if os.path.exists(local_save_path):
        print(f"已跳过: {file_name}")
        continue

    try:
        # stream=True开启流式下载,适合大文件降低内存占用
        resp = requests.get(download_url, stream=True, timeout=30)
        # 遇到HTTP错误(404/500等)自动抛出异常
        resp.raise_for_status()

        # 分块写入本地文件
        with open(local_save_path, 'wb') as f:
            for chunk in resp.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"下载完成: {file_name}")
    except Exception as e:
        print(f"下载失败: {file_name},错误信息: {str(e)}")

关键逻辑说明

  • 目录自动创建:os.makedirs的exist_ok=True参数保证多次运行代码不会因目录已存在报错
  • 重复下载过滤:本地已经存在的文件会直接跳过,无需重复发起请求
  • 异常兼容:所有请求、写入环节的异常都会被捕获,单个文件下载失败不会中断整个批量任务
  • 大文件适配:流式下载+8KB分块写入,就算是GB级资源也不会占满运行内存
  • 状态输出:每个文件的下载状态都会实时打印,方便后续核对失败资源

补充说明:如果站点有反爬限制,可在requests.get参数中添加headers伪装浏览器请求,也可以引入time.sleep设置请求间隔,避免触发频率限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:54:03