You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python3 requests无法抓取指定网站Cookie,咨询调整方法

解决requests无法抓取radiotimes.com 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。这时你可以使用seleniumplaywright这类工具,它们能模拟完整的浏览器环境:

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

火山引擎 最新活动