如何在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
相关产品推荐
相关产品推荐

