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

如何在Python中准确验证YouTube视频与播放列表URL的有效性?

解决YouTube URL验证问题的几种方案

方案一:用正则表达式先做格式校验

先通过正则匹配YouTube视频/播放列表的标准格式,过滤掉参数不完整的URL。比如:

  • 视频URL需包含完整的v=参数(参数值固定11位字符)
  • 播放列表URL需包含完整的list=参数(参数值长度通常在16位以上)

示例代码:

import re

def is_valid_youtube_url(url):
    # 匹配普通视频、短链视频URL
    video_pattern = re.compile(r'^(https?://)?(www\.)?(youtube\.com/watch\?v=|youtu\.be/)[A-Za-z0-9_-]{11}$')
    # 匹配播放列表URL
    playlist_pattern = re.compile(r'^(https?://)?(www\.)?youtube\.com/playlist\?list=[A-Za-z0-9_-]{16,}$')
    return video_pattern.match(url) or playlist_pattern.match(url)

这种方式能快速过滤掉参数不完整的输入,减少后续不必要的HTTP请求或异常。

方案二:直接利用pytube的逻辑或捕获异常

既然最终要调用pytube,不如直接用它的验证机制,或者在实例化对象时捕获异常——这是最准确的方式,因为pytube会同步YouTube的URL规则变化。

示例代码:

from pytube import YouTube, Playlist
from pytube.exceptions import VideoUnavailable, PlaylistNotFound

def validate_with_pytube(url):
    try:
        if 'watch?v=' in url or 'youtu.be/' in url:
            yt = YouTube(url)
            yt.check_availability()  # 主动检查视频是否可访问
            return True
        elif 'playlist?list=' in url:
            pl = Playlist(url)
            next(pl.videos, None)  # 尝试获取列表首个视频,验证列表有效性
            return True
        else:
            return False
    except (VideoUnavailable, PlaylistNotFound, Exception):
        return False

这种方式直接贴合后续业务逻辑,避免了和pytube校验规则不一致的问题。

方案三:优化HTTP请求校验

如果不想用正则或依赖pytube异常,也可以改进HTTP请求的校验逻辑:

  • 发送请求后,除了检查状态码,还要解析响应内容,判断页面是否包含“视频不存在”“播放列表不存在”这类关键词
  • 比如检查响应文本中是否有"Video unavailable"或"This playlist doesn't exist"的标识

不过这种方式容易受YouTube页面结构变化影响,维护成本较高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:15:30