如何下载blob:https://格式URL的图片?requests与urllib调用失败
解决blob:https://类型URL的图片下载问题
为什么requests/urllib无法下载?
blob:开头的URL并非标准HTTP/HTTPS协议地址,它是浏览器为本地访问内存/磁盘中的二进制数据生成的伪协议链接,仅在生成它的浏览器会话上下文内有效。requests和urllib是HTTP客户端库,只支持HTTP/HTTPS等标准网络协议,自然无法识别处理这类链接,因此会抛出错误。
两种可行的解决方法
方法1:通过浏览器自动化工具(如Selenium)获取
利用浏览器上下文直接提取图片的二进制数据,步骤如下:
- 启动浏览器加载目标页面
- 定位到目标图片元素
- 通过JS脚本将blob图片转换为base64编码,再解码保存
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By import base64 # 初始化浏览器驱动(需提前安装对应浏览器的driver) driver = webdriver.Chrome() driver.get("目标页面的完整URL") # 定位到使用blob URL的图片元素 img = driver.find_element(By.CSS_SELECTOR, "img[src^='blob:https://']") # 执行JS脚本将图片转为base64 base64_img = driver.execute_script(""" const canvas = document.createElement('canvas'); canvas.width = arguments[0].width; canvas.height = arguments[0].height; canvas.getContext('2d').drawImage(arguments[0], 0, 0); return canvas.toDataURL('image/png'); """, img) # 解码并保存图片 img_data = base64.b64decode(base64_img.split(',')[1]) with open("downloaded_blob_image.png", "wb") as f: f.write(img_data) driver.quit()
方法2:找到blob对应的原始HTTP请求
blob URL通常是浏览器对某个原始HTTP请求返回的二进制数据生成的本地链接,你可以通过浏览器开发者工具找到这个原始请求:
- 打开目标页面,按下F12打开开发者工具
- 切换到「Network」标签,勾选「Preserve log」
- 刷新页面,找到返回图片二进制数据的请求(通常是XHR/Fetch类型,响应类型为
image/png或image/jpeg) - 复制该请求的真实URL,直接用requests/urllib请求下载
示例代码:
import requests # 替换为找到的原始图片请求URL raw_image_url = "https://example.com/path/to/real/image" resp = requests.get(raw_image_url) with open("direct_download_image.png", "wb") as f: f.write(resp.content)
注意事项
- blob URL的有效期与当前浏览器会话绑定,关闭浏览器后链接立即失效
- 如果blob是从本地文件(如用户上传的文件)生成的,只能通过方法1获取
内容的提问来源于stack exchange,提问作者Taxenmaxen
相关产品推荐
相关产品推荐

