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

在Google Colab中下载Flickr视频遇502错误,求可行解决方案

问题分析

出现502 Bad Gateway大概率是Flickr的反爬机制拦截了Colab的请求,核心原因包括:

  • Colab的IP段被Flickr加入黑名单
  • Headless浏览器特征被识别
  • 请求视频URL时缺少必要的请求头
  • 原有的视频链接提取方式失效

解决方案

1. 优化浏览器配置,模拟真实用户环境

给Chrome添加更多模拟真实浏览器的参数,避免被识别为自动化工具:

!sudo apt update
!pip install chromedriver-autoinstaller selenium requests
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin

from IPython.display import clear_output
from selenium import webdriver
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
import sys
import os
import requests
import time

sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless=new')  # 新版无头模式更接近真实浏览器
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# 添加真实的User-Agent,可从自己浏览器复制
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36')
# 禁用自动化检测特征
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

chromedriver_autoinstaller.install()
clear_output()
driver = webdriver.Chrome(options=chrome_options)

# 避免文件夹已存在报错
videos_folder = "/content/videos/"
if not os.path.exists(videos_folder):
    os.mkdir(videos_folder)

2. 改进视频链接提取与下载方式

直接提取页面中video标签的src属性,比正则更可靠;用requests库下载并携带请求头:

def download_video_from_url(url, name):
    try:
        driver.get(url)
        # 等待页面加载完成
        time.sleep(3)
        # 直接获取video标签的src
        video_element = driver.find_element(By.TAG_NAME, 'video')
        video_url = video_element.get_attribute('src')
        if not video_url:
            # 尝试获取source标签的src
            source_element = driver.find_element(By.TAG_NAME, 'source')
            video_url = source_element.get_attribute('src')
        
        if video_url:
            # 携带请求头请求视频,模拟真实浏览器
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
                'Referer': url  # 必须携带Referer,否则可能被拦截
            }
            response = requests.get(video_url, headers=headers, stream=True)
            response.raise_for_status()
            with open(os.path.join(videos_folder, name), "wb") as f:
                for chunk in response.iter_content(chunk_size=8192):
                    f.write(chunk)
            return 1
        else:
            return 0
    except Exception as e:
        print(f"下载失败: {str(e)}")
        return 0

3. 代理方案优化(如果IP被封)

如果Colab IP确实被封,建议使用稳定的HTTP代理,而不是依赖在线代理网站:

# 在Chrome配置中添加代理
chrome_options.add_argument('--proxy-server=http://your-proxy-ip:port')
# 或者使用认证代理
# chrome_options.add_argument('--proxy-server=http://username:password@your-proxy-ip:port')

注意:在线代理网站通常会对视频资源做限制,且模拟点击的方式不稳定,优先使用专业代理服务。

额外注意事项

  • 不要频繁请求Flickr,控制请求间隔,避免触发更严格的反爬
  • 若仍出现502,可尝试更换Colab运行时(重新分配IP)
  • 确认目标视频是否允许下载,避免违反Flickr的服务条款

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:54