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

