Python爬虫遇403禁止错误:自动获取合法HTTP头部Cookie方案咨询
以下是几种自动绕过__cf_bm Cookie限制的可行方案:
方案1:利用requests模拟初始请求流程(轻量爬取适用)
__cf_bm是Cloudflare Bot Management生成的临时会话Cookie,可通过模拟浏览器初始请求自动获取:
- 先发送不带Cookie的请求,触发Cloudflare的Cookie生成逻辑
- 借助requests会话自动保存响应返回的Cookie
- 后续请求复用该会话即可维持有效状态
修改后的代码示例:
import requests url = "https://dexscreener.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0" } session = requests.Session() session.headers.update(headers) # 首次请求触发Cookie生成,会话自动保存Set-Cookie session.get(url) # 复用会话发起有效请求 response = session.get(url) print(response.status_code) print(response.text[:500])
注意:该方法依赖Cloudflare的基础验证逻辑,若后续触发验证码则失效。
方案2:使用undetected-chromedriver(稳定适配大规模爬取)
若Cloudflare检测到requests的请求特征并触发验证码,可通过undetected-chromedriver模拟真实浏览器行为,自动处理验证和Cookie更新:
- 安装依赖:
pip install undetected-chromedriver
- 代码示例:
import undetected_chromedriver as uc import time # 初始化浏览器,自动绕过Cloudflare验证 driver = uc.Chrome() driver.get("https://dexscreener.com") # 等待页面加载完成 time.sleep(3) # 获取页面内容 page_source = driver.page_source print(page_source[:500]) # 提取Cookie供requests复用(可选) cookies = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()} print(cookies.get('__cf_bm')) driver.quit()
该方法完全模拟真实用户操作,Cloudflare难以检测,Cookie会随会话自动更新,无需手动维护。
通用注意事项
- 设置合理请求间隔,避免短时间内高频请求触发频率限制
- 保持User-Agent与真实浏览器一致,避免使用特殊标识
- 大规模爬取时建议搭配代理IP分散请求来源
内容的提问来源于stack exchange,提问作者Nor1n
相关产品推荐
相关产品推荐

