如何使用Python搜索YouTube视频后获取视频的完整名称
解决方案
你可以通过匹配单视频页的标题标签获取视频完整名称,这种方式比直接在搜索结果页匹配更稳定,修改后的代码如下:
import urllib.request import re # 加请求头伪装浏览器,避免被YouTube反爬拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } search_keyword = "music" # 构造搜索请求 search_req = urllib.request.Request("https://www.youtube.com/results?search_query=" + search_keyword, headers=headers) search_song_url = urllib.request.urlopen(search_req) html_content = search_song_url.read().decode() # 提取视频ID,去重避免重复结果 video_ids = list(set(re.findall(r"watch\?v=(\S{11})", html_content))) if video_ids: # 取第一个视频的完整链接 video_url = "https://www.youtube.com/watch?v=" + video_ids[0] # 请求视频详情页 video_req = urllib.request.Request(video_url, headers=headers) video_page = urllib.request.urlopen(video_req).read().decode() # 匹配页面title标签,默认格式为「视频名称 - YouTube」 title_match = re.search(r'<title>(.*?) - YouTube</title>', video_page) if title_match: video_title = title_match.group(1) # 处理HTML转义字符 video_title = video_title.replace('&', '&').replace('"', '"').replace(''', "'") print("视频标题:", video_title) print("视频链接:", video_url) else: print("未搜索到相关视频")
注意事项
- 直接爬取YouTube页面会触发反爬机制,频繁请求可能导致IP被临时限制
- 页面结构如果发生更新,需要同步调整正则匹配规则
- 如果是正式场景使用,建议调用官方YouTube Data API获取数据,稳定性更高
内容的提问来源于stack exchange,提问作者Soham Program learner
相关产品推荐
相关产品推荐

