我正在尝试下载位于 blob:https:// 等网址的图像,但是使用 requests 和 urllib 不起作用。他们在发出请求时都会崩溃。 urllib 给出错误代码“”,而 requests 给出“未找到“blob”的连接适配器”。
您似乎正在尝试从以“blob:https://”开头的 URL 下载图像。这种类型的 URL 引用 Blob 对象,该对象通常用于在浏览器中生成或操作的数据。这些 URL 无法通过标准 HTTP 请求直接访问,这就是
requests
和 urllib
都失败的原因。
事情是这样的:
要下载这些图像,您需要采用不同的方法。这里有几个选项:
如果您使用的是 Selenium 等浏览器自动化工具: 您可以使用 JavaScript 将 blob 转换为数据 URL 或直接下载。
如果图像是从网络应用程序生成的: 尝试找到图像的原始来源。可能有 API 或不同的 URL 提供对图像文件的直接访问。
如果您正在开发浏览器扩展: 您可以使用浏览器的 API 直接访问 blob URL。
如果您正在使用特定的 Web 应用程序: 调查是否有可用的 API 允许您直接下载图像。
以下是如何使用 Selenium 下载 blob URL 的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
driver = webdriver.Chrome() # Or whichever browser you're using
driver.get("https://example.com") # The page containing the image
# Find the image element
img_element = driver.find_element(By.CSS_SELECTOR, "img#your-image-id")
img_url = img_element.get_attribute('src')
# Execute JavaScript to fetch the image as a Base64 string
img_base64 = driver.execute_script("""
var xhr = new XMLHttpRequest();
xhr.open('GET', arguments[0], false);
xhr.responseType = 'blob';
xhr.send(null);
var reader = new FileReader();
reader.readAsDataURL(xhr.response);
return reader.result;
""", img_url)
# Remove the "data:image/png;base64," part
img_base64 = img_base64.split(',')[1]
# Decode and save the image
with open("image.png", "wb") as f:
f.write(base64.b64decode(img_base64))
driver.quit()
此脚本使用 Selenium 来:
请记住,具体实施可能会有所不同,具体取决于您的具体用例和您正在使用的网站。请始终确保您有权下载和使用图像,并遵守网站的服务条款和 robots.txt 文件。