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

Python requests请求YouTube返回意大利语内容的原因及修复方法

提问原文翻译

我正在开发一个*scraper(爬虫)*来获取YouTube视频的相关数据,我来自西班牙,需要提取视频中出现的歌曲信息,我的代码初始部分如下:

url = f'https://www.youtube.com/watch?v={vid}'
page = requests.get(url).text

核心问题是后续我需要将页面文本与部分西班牙语字符串做匹配,例如Con licencia cedida a YouTube por。但现在我获取到的文本是意大利语版本,对应内容为Concesso in licenza a YouTube da。请问是什么原因导致的?我之前发现自己的YouTube位置设为了意大利,已经修改为西班牙,同时删除了项目和requests模块下的所有pycache文件夹,但请求依然返回意大利语版本,有什么解决思路?

问题原因

你在浏览器端修改的YouTube位置设置仅作用于当前浏览器的会话,和requests发起的独立HTTP请求没有关联,删除缓存文件夹也不会对请求返回的内容语言产生影响。YouTube会根据你请求携带的IP属地、Accept-Language请求头、URL地域参数三个核心维度判断返回内容的语言和地区版本,你现在拿到意大利语内容,大概率是默认请求未指定西语相关的头/参数,或者出口IP属于意大利导致的。

解决思路
  • 优先在请求头中添加Accept-Language参数,明确指定优先返回西班牙语内容,同时建议补充常规的User-Agent头避免被YouTube识别为爬虫限制访问,修改后的代码示例如下:
import requests

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',
    'Accept-Language': 'es-ES,es;q=0.9,en;q=0.8'
}
vid = "替换为你的视频ID"
url = f'https://www.youtube.com/watch?v={vid}'
page = requests.get(url, headers=headers).text
  • 在请求URL中补充gl参数指定地区,gl=ES对应西班牙地区,明确要求返回西班牙属地的页面内容,URL调整为:
    url = f'https://www.youtube.com/watch?v={vid}&gl=ES'
  • 确认你发起请求的出口IP属地,如果IP属于意大利,可更换西班牙代理IP发起请求,避免IP属地优先级高于请求头导致返回意大利语内容。
  • 长期使用更推荐改用YouTube官方公开的Data API获取歌曲版权信息,不需要处理多语言字符串匹配问题,稳定性远高于直接爬取前端页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:02