作者:Snape吾爱 | 来源:互联网 | 2023-09-13 10:15
我正在尝试从Youtube频道检索Youtube视频列表,比如“https://www.youtube.com/user/YouTube/videos”,以获得第n个第一个视频
我正在尝试从 Youtube 频道检索 Youtube 视频列表,比如“https://www.youtube.com/user/YouTube/videos”,以获得第 n 个第一个视频(感谢key = "videoId"
)。直到几天前,它开始征求我的同意之前,它曾经像魅力一样发挥作用。
我在 SO 上尝试了很多东西,但都没有成功,我仍然看到要求我接受 COOKIE 以查看视频的消息。
import requests
import re
url='https://www.youtube.com/user/YouTube/videos'
s1 = requests.session()
s1.get(url)
print("Original COOKIEs")
print(s1.COOKIEs)
COOKIEValueNum = (re.findall(r'd+', str(s1.COOKIEs)))[0]
COOKIEValue = ('YES+cb.20210328-17-p0.en-GB+FX+'+str(COOKIEValueNum))
COOKIE = {'name': 'CONSENT', 'value': COOKIEValue, 'domain': '.youtube.com'}
print("==========")
print("After new COOKIE added")
s1.COOKIEs.update(COOKIE)
print(s1.COOKIEs)
print(s1.get(url, COOKIEs=COOKIE).text)
它仍然返回相同的消息,要求我同意使用 COOKIE(显然是在 html 中,这是我在私人会话中打开 Youtube 时得到的图片):
我的想法是复制Consent
COOKIE 并将其发送回以便能够访问页面内容。
知道我做错了什么吗?这个想法不是使用 Youtube API,而是只在需要时请求/BeautifulSoup。
回答
您需要删除第一响应 COOKIE。我不确定如何在 requests.session 中做到这一点,但以下任何一项都对我有用。
requests.get('https://www.youtube.com/user/YouTube/videos', COOKIEs={'CONSENT': 'PENDING+999'})
requests.get('https://www.youtube.com/user/YouTube/videos', COOKIEs={'CONSENT': 'YES+cb.20210328-17-p0.en-GB+FX+{}'.format(random.randint(100, 999))})