使用Python3 requests无法抓取指定网站Cookie,咨询调整方法
嘿,我来帮你搞定这个问题!很多现代网站(包括radiotimes.com)会通过检查请求合法性、设置Cookie授权机制或者依赖JS渲染来限制简单爬虫请求,咱们一步步调整你的代码:
1. 添加模拟真实浏览器的请求头
网站首先会检查User-Agent字段判断请求是否来自真实浏览器,默认的requests请求头很容易被识别为爬虫。你可以把请求头设置成主流浏览器的标识:
import requests # 模拟Chrome浏览器的请求头 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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5' } session = requests.Session() session.headers.update(headers) response = session.get('https://www.radiotimes.com/tv/tv-listings/') print(session.cookies.get_dict())
2. 处理Cookie授权弹窗
作为欧洲地区的网站,radiotimes.com有Cookie授权机制——只有你明确同意后,网站才会设置完整的功能Cookie。你需要先发送一个同意授权的请求,再访问目标页面:
import requests 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', 'Referer': 'https://www.radiotimes.com/tv/tv-listings/' } session = requests.Session() session.headers.update(headers) # 先发送Cookie同意请求(注意:实际接口需要你用浏览器抓包获取) # 打开浏览器F12→Network标签,点击网站的"Accept All Cookies",复制对应的请求URL和参数 consent_url = "https://www.radiotimes.com/api/consent/accept" # 示例地址,需替换为真实接口 consent_data = {"consent": "all"} session.post(consent_url, data=consent_data) # 再访问目标页面 response = session.get('https://www.radiotimes.com/tv/tv-listings/') print(session.cookies.get_dict())
3. 若仍失败,尝试支持JS渲染的工具
如果上述方法还是无法获取Cookie,说明部分Cookie是通过前端JavaScript动态设置的——而requests是纯HTTP库,无法执行JS。这时你可以使用selenium或playwright这类工具,它们能模拟完整的浏览器环境:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless=new") # 无头模式,不显示浏览器窗口 driver = webdriver.Chrome(options=options) driver.get('https://www.radiotimes.com/tv/tv-listings/') # 获取所有Cookie cookies = driver.get_cookies() cookie_dict = {cookie['name']: cookie['value'] for cookie in cookies} print(cookie_dict) driver.quit()
这些调整的核心是让你的请求尽可能贴近真实用户的浏览器行为,绕过网站的反爬检测。
内容的提问来源于stack exchange,提问作者gdogg371




