接受 Youtube 的 cookie 同意
Accept cookies consent from Youtube
我正在尝试从 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)
它仍然是 returns 征求我对 cookie 的同意的相同消息(显然,在 html 中,这是我在私人会话中打开 Youtube 时得到的图片):
然后我的想法是复制 Consent
cookie 并将其发回以便能够访问页面内容。
知道我做错了什么吗?
我的想法是不使用 Youtube API,但仅在需要时使用 request/BeautifulSoup。
Google 是个骗子,并试图用这些技术来识别您。现在似乎有办法保留同意 cookie - 或者您每次都必须同意
您需要删除第一响应 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))})
我遇到了同样的问题 - 这是一个适合您的情况的解决方案。
使用像 chrome 这样的浏览器,您可以随时检查需要传递哪些数据才能接受 cookie。您可以在开发工具 -> 应用程序 -> cookies 中找到这些信息。
screenshot of the google chrome cookie view
这样做,您会看到 youtube 需要 YES 或 NO 以及任何大于 0 的整数。
在您的请求中传递这些信息。就是这样。
requests.get('https://www.youtube.com/user/YouTube/videos', cookies={'CONSENT': 'YES+1'})
像这样设置 headers 您的请求:
headers = {
'Authorization': 'authorization',
'cookie': 'hl=en'
}
并使用 tor 更改所有请求的 ip。
发送请求后检查您的响应,如果 Before you continue 存在于 response.text 中,请设置 time sleep 几秒钟(此时您的 ip 将更改)然后再次发送请求。
我正在尝试从 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)
它仍然是 returns 征求我对 cookie 的同意的相同消息(显然,在 html 中,这是我在私人会话中打开 Youtube 时得到的图片):
然后我的想法是复制 Consent
cookie 并将其发回以便能够访问页面内容。
知道我做错了什么吗? 我的想法是不使用 Youtube API,但仅在需要时使用 request/BeautifulSoup。
Google 是个骗子,并试图用这些技术来识别您。现在似乎有办法保留同意 cookie - 或者您每次都必须同意
您需要删除第一响应 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))})
我遇到了同样的问题 - 这是一个适合您的情况的解决方案。
使用像 chrome 这样的浏览器,您可以随时检查需要传递哪些数据才能接受 cookie。您可以在开发工具 -> 应用程序 -> cookies 中找到这些信息。
screenshot of the google chrome cookie view
这样做,您会看到 youtube 需要 YES 或 NO 以及任何大于 0 的整数。
在您的请求中传递这些信息。就是这样。
requests.get('https://www.youtube.com/user/YouTube/videos', cookies={'CONSENT': 'YES+1'})
像这样设置 headers 您的请求:
headers = {
'Authorization': 'authorization',
'cookie': 'hl=en'
}
并使用 tor 更改所有请求的 ip。 发送请求后检查您的响应,如果 Before you continue 存在于 response.text 中,请设置 time sleep 几秒钟(此时您的 ip 将更改)然后再次发送请求。