使用Selenium爬取Unsplash图片:如何获取302重定向后的最终下载URL
获取Unsplash下载链接302重定向后的真实图片地址实现方法
方案1:基于现有Selenium实例解析重定向地址
不需要额外引入第三方依赖,直接复用已经启动的Firefox浏览器完成重定向解析:
- 初始化浏览器时调整配置,禁用自动下载弹窗,让浏览器加载图片资源而非触发保存动作
对应配置代码:from selenium import webdriver from selenium.webdriver.firefox.options import Options import time firefox_options = Options() # 关闭下载启动提示 firefox_options.set_preference("browser.download.manager.showWhenStarting", False) # 所有文件类型都弹出询问,不默认关联为自动下载 firefox_options.set_preference("browser.helperApps.alwaysAsk.force", True) firefox_options.set_preference("browser.helperApps.neverAsk.saveToDisk", "") # 启动带配置的浏览器 browser = webdriver.Firefox(options=firefox_options) - 遍历已拼接好的下载链接,逐个跳转读取最终URL
# 已收集到的下载链接列表 download_url_list = [ "https://unsplash.com/photos/QNBwyf0Cn-g/download?force=true&w=1920", # 其他链接... ] real_image_urls = [] for url in download_url_list: browser.get(url) # 等待302跳转完成 time.sleep(2) # 此时current_url为重定向后的真实图片地址 real_image_urls.append(browser.current_url)
方案2:通过轻量HTTP请求批量解析重定向地址
适合批量处理大量已收集的下载链接,不占用浏览器标签页资源,处理效率更高:
- 引入requests库,携带和浏览器一致的请求头,发送自动跟随重定向的HEAD请求
import requests request_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } download_url_list = [ "https://unsplash.com/photos/QNBwyf0Cn-g/download?force=true&w=1920", # 其他链接... ] real_image_urls = [] for url in download_url_list: # 发送HEAD请求,自动跟随302跳转 resp = requests.head( url, headers=request_headers, allow_redirects=True, timeout=10 ) # 响应的最终URL就是重定向后的真实图片地址 real_image_urls.append(resp.url)
实现注意事项
- 使用requests发请求时必须携带合法的浏览器User-Agent,否则会触发Unsplash的反爬校验,直接返回403状态码,无法获取重定向结果
- 调整Selenium浏览器配置时,不要将图片MIME类型加入自动下载白名单,否则浏览器会直接弹出保存对话框,不会跳转到图片资源地址,也就无法读取到最终URL
- 获取到真实图片地址后,可直接通过requests的流式请求拉取图片二进制内容写入本地文件,无需触发浏览器下载流程,可大幅降低资源占用、提升爬取速度
内容的提问来源于stack exchange,提问作者AliC
相关产品推荐
相关产品推荐

