使用Python爬取ticketweb网站遇506 Invalid Request错误求助
解决爬取ticketweb时506 Invalid Request错误的方法
你遇到的506错误是被目标站的Varnish缓存服务器拦截了——浏览器能正常访问是因为请求头更完整,还携带了会话Cookie,而你的Python请求头过于简略,被识别为非浏览器请求。
核心问题拆解
Accept-Encoding设置错误:这个字段是告诉服务器支持的压缩格式,浏览器不会用utf-8,正确格式应该是gzip, deflate, br这类- 请求头缺失关键字段:比如
Accept-Language、Referer、Connection等常规浏览器请求字段,缺失后容易被反爬机制识别 - 未携带会话Cookie:部分网站会验证会话Cookie,无Cookie的请求会直接被拒绝
修正后的脚本示例
import requests # 用Session维持会话,自动处理Cookie session = requests.Session() url = 'https://www.ticketweb.com/search?q=' # 模拟完整的浏览器请求头(直接从开发者工具复制真实请求头会更准确) HEADERS = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", "Referer": "https://www.ticketweb.com/", "Upgrade-Insecure-Requests": "1" } # 先请求首页获取Cookie,再发起搜索页请求 session.get('https://www.ticketweb.com/', headers=HEADERS) response = session.get(url, headers=HEADERS) print(response.status_code) print(response.text)
额外注意事项
- 直接复制浏览器真实请求头:按F12打开网络面板,刷新页面找到搜索页请求,复制完整的
Request Headers,能最大程度模拟浏览器行为 - 控制请求频率:短时间大量请求会触发更严格的反爬,可能导致IP被封禁
- 若仍失败,可手动添加Cookie:从浏览器Cookie中复制会话ID等关键值,放到请求头的
Cookie字段里
内容的提问来源于stack exchange,提问作者Cristher Rubio
相关产品推荐
相关产品推荐

