添加请求头仍触发requests 403 Forbidden错误,请求排查原因
排查Vivareal爬虫403 Forbidden问题的思路和解决办法
常见原因及对应方案
1. User-Agent版本过于老旧
你用的Chrome 50版本UA太陈旧,Vivareal的反爬系统可能直接判定为异常请求。换成当前主流浏览器的UA,补充必要请求头字段模拟真实访问:
hdr = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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": "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3", "Referer": "https://www.vivareal.com.br/", "Connection": "keep-alive" }
2. 未维持会话Cookie
直接请求详情页可能缺少网站要求的会话Cookie,改用requests.Session()保持会话,先访问首页获取Cookie再请求详情页:
session = requests.Session() # 先访问首页初始化会话 session.get("https://www.vivareal.com.br/", headers=hdr) # 再请求目标详情页 response = session.get(pagina_produto, headers=hdr) response.raise_for_status()
3. 请求频率过高触发拦截
爬虫请求速度远快于人类操作,需在请求间添加随机延迟:
import time import random # 每次请求后随机延迟1-3秒 time.sleep(random.uniform(1, 3))
4. 网站启用进阶反爬防护
如果上述方法都无效,说明网站用了Cloudflare之类的人机验证机制,普通requests无法绕过,需用undetected_chromedriver模拟真实浏览器行为:
from undetected_chromedriver import Chrome, ChromeOptions from bs4 import BeautifulSoup options = ChromeOptions() options.add_argument("--headless=new") # 无头模式运行浏览器 driver = Chrome(options=options) # 先访问首页建立会话 driver.get("https://www.vivareal.com.br/") # 跳转至详情页 driver.get(pagina_produto) # 获取页面源码解析 html = driver.page_source sp = BeautifulSoup(html, "html.parser")
额外注意事项
- 避免一次性批量爬取大量页面,分批次加延迟,防止IP被封禁。
- 定期更新请求头的UA字段,避免因UA过期被拦截。
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

