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

如何在Google Colab/Jupyter中通过URL下载图片?

在Google Colab/Jupyter中通过URL下载图片的解决方案

你已经成功提取到了图片的下载链接DownURL,接下来只需要在循环逻辑里添加几行代码,就能把图片下载到本地(或者Colab/Jupyter的工作环境中)。我给你两种常用的实现方式,你可以根据需求选择:

方法1:使用urllib.request(和你现有代码的依赖一致)

直接在提取DownURL的循环块里补充下载逻辑,还可以给图片生成包含站点ID和测量日期的自定义文件名,避免重名且方便后续管理:

from bs4 import BeautifulSoup
import requests
import json
import urllib.request
# 如果是在Google Colab中,需要导入files模块来触发浏览器下载
from google.colab import files

# 使用Globe API获取数据
userid = xxxxxxxx
source = requests.get('https://api.globe.gov/search/v1/measurement/protocol/measureddate/userid/?protocols=land_covers&startdate=2020-05-04&enddate=2020-07-16&userid=' + str(userid) +'&geojson=FALSE&sample=FALSE').text

# 初始化BeautifulSoup4并解析数据
soup = BeautifulSoup(source, 'lxml')
body = soup.find('body')
paragraph = body.p.text
data = json.loads(paragraph)

# 提取信息+批量下载图片
for landcover in data['results']:
    siteId = landcover['siteId']
    measuredDate = landcover['measuredDate']
    latitude = landcover['latitude']
    longitude = landcover['longitude']
    protocol = landcover['protocol']
    DownURL = landcover['data']['landcoversDownwardPhotoUrl']
    
    # 生成自定义文件名(替换日期里的冒号,避免系统识别错误)
    filename = f"{siteId}_{measuredDate.replace(':', '-')}_downward.jpg"
    # 下载图片到当前工作目录
    urllib.request.urlretrieve(DownURL, filename)
    print(f"已完成下载:{filename}")
    
    # Colab环境下执行此行,可直接将图片下载到本地浏览器
    files.download(filename)

方法2:使用requests库(更灵活,支持异常处理)

如果你想处理链接失效、请求失败等异常情况,用requests实现会更稳妥,代码逻辑类似:

from bs4 import BeautifulSoup
import requests
import json
from google.colab import files  # Colab专属,Jupyter环境可忽略

# 前面的API请求和数据解析部分和原代码一致
userid = xxxxxxxx
source = requests.get('https://api.globe.gov/search/v1/measurement/protocol/measureddate/userid/?protocols=land_covers&startdate=2020-05-04&enddate=2020-07-16&userid=' + str(userid) +'&geojson=FALSE&sample=FALSE').text
soup = BeautifulSoup(source, 'lxml')
body = soup.find('body')
paragraph = body.p.text
data = json.loads(paragraph)

for landcover in data['results']:
    # 提取信息部分不变
    siteId = landcover['siteId']
    measuredDate = landcover['measuredDate']
    DownURL = landcover['data']['landcoversDownwardPhotoUrl']
    
    filename = f"{siteId}_{measuredDate.replace(':', '-')}_downward.jpg"
    try:
        # 发送请求获取图片内容(stream=True适合大文件)
        img_response = requests.get(DownURL, stream=True)
        img_response.raise_for_status()  # 检查请求是否成功
        # 写入本地文件
        with open(filename, 'wb') as img_file:
            for chunk in img_response.iter_content(chunk_size=8192):
                img_file.write(chunk)
        print(f"成功下载:{filename}")
        # Colab环境下触发浏览器下载
        files.download(filename)
    except Exception as e:
        print(f"下载{filename}失败:{str(e)}")

额外说明

  • 在Jupyter Notebook中,图片会直接保存到Notebook所在的本地目录,你可以用!ls命令查看当前目录的文件。
  • 如果是Google Colab,还可以把图片保存到Google Drive,只需要先挂载Drive:
    from google.colab import drive
    drive.mount('/content/drive')
    # 之后把保存路径改成:'/content/drive/MyDrive/你的目标文件夹/' + filename
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:57:50