如何程序化通过Postman获取GET请求头,解决requests爬取站点403问题
403禁止访问问题解决方法
原因说明
目标站点使用Imperva反爬防护体系,简单GET请求缺少合法客户端指纹、请求头参数、有效会话Cookie,因此直接被拦截返回403状态码。Postman请求能成功是因为自带了完整的标准请求头,且首次访问时完成了反爬校验生成了有效Cookie。
稳定解决方案
方案1:补充完整请求头维持会话(最高效)
不需要依赖Postman或者Selenium,直接构造完整合法的请求头,用requests.Session自动维护Cookie更新,不需要手动处理5分钟过期的问题:
import requests # 从Postman中复制所有请求头参数,不要只复制Cookie headers = { 'User-Agent': '你Postman里的UA字符串,完全抄过来', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-User': '?1' } # 用Session维持会话,会自动处理Cookie的更新、过期逻辑 session = requests.Session() session.headers.update(headers) # 首次访问首页获取有效Cookie resp = session.get('https://www.metrocuadrado.com/') print(resp.status_code) # 正常会返回200 # 后续所有爬取请求都用这个session发送,不需要手动处理Cookie detail_resp = session.get('你要爬的房产详情页链接')
方案2:修复Selenium获取Cookie无效的问题
Selenium拿到的Cookie无法使用是因为客户端指纹不匹配,按以下步骤调整即可正常使用:
- 启动Selenium时指定固定User-Agent,和后续requests使用的UA完全一致
- 访问目标站首页后等待3-5秒,等反爬脚本执行完成生成完整的有效Cookie
- 不要手动拼接Cookie头,直接将Cookie批量导入requests.Session:
from selenium import webdriver import requests # 固定UA ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' # 启动selenium options = webdriver.ChromeOptions() options.add_argument(f'user-agent={ua}') driver = webdriver.Chrome(options=options) # 访问首页等待加载 driver.get('https://www.metrocuadrado.com/') import time time.sleep(5) # 导入cookie到session session = requests.Session() session.headers.update({'User-Agent': ua}) for cookie in driver.get_cookies(): session.cookies.set(cookie['name'], cookie['value']) # 验证可用性 resp = session.get('https://www.metrocuadrado.com/') print(resp.status_code)
方案3:调用Postman获取Cookie
如果必须通过Postman生成有效Cookie,可以安装postman-cli工具,将你当前的请求导出为Postman集合,通过命令行运行集合后导出响应Cookie,再读取导入到requests会话中即可。
注意事项
爬取时控制请求频率,建议单次请求间隔1-2秒,高频请求会触发IP封禁,爬取大量数据建议搭配代理池使用。
内容的提问来源于stack exchange,提问作者David López
相关产品推荐
相关产品推荐

