BeautifulSoup爬取网页Access Denied报错方案失效咨询
Niche站点爬取403问题解决方案
你之前的配置只能短期生效,本质是请求特征太明显、IP触发反爬规则导致的,按以下优先级排查调整即可:
1. 修正基础请求的明显特征
- 换掉你用的2018年版Chrome 71的User-Agent,这类停更多年的浏览器版本UA早就进反爬规则库了,换成近半年内主流Chrome、Edge版本的UA,多准备几个组成UA池每次请求随机调用,不要固定用单个UA。
- 补全真实浏览器必带的请求头字段,你当前的headers缺了
Sec-Ch-Ua、Sec-Fetch系列、Upgrade-Insecure-Requests等多个特征字段,很容易被识别为脚本;另外把Connection字段的值从close改成keep-alive,主动设close是非常明显的爬虫特征。
修正后的基础headers参考:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.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.9', 'Accept-Encoding': 'gzip, deflate, br', 'DNT': '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-User': '?1' }
- 不要每次请求都新建连接,用
requests.Session()维持会话,先访问站点首页拿到完整的站点cookie,再带着已有cookie访问目标列表页,真实用户不会直接跳过首页访问深层分页。
2. 解决IP封禁问题
生效几小时后被封,核心原因大概率是单IP请求频率过高触发了临时封禁:
- 给请求加随机间隔,不要固定间隔几秒,设置3-10秒的随机等待时间,不要短时间内发大量请求。
- 调整爬取路径,不要按顺序连续爬所有列表分页,中间随机穿插访问几个站点其他页面,模拟真实用户的浏览行为,不要让请求路径完全规律。
- 如果调整频率后还是被封,更换高匿住宅代理,普通数据中心代理、免费代理对这类站点的通过率极低,很容易被识别。
3. 进阶反爬绕过
如果改完请求头、换了代理还是被拦截,说明站点触发了更严格的指纹校验:
- 放弃裸requests请求,改用Playwright、Puppeteer这类浏览器自动化工具,配合指纹隐身插件抹掉webdriver标识,模拟真实浏览器的JS执行、渲染行为,这类工具对JS校验类反爬的通过率远高于直接发HTTP请求。
- 爬取过程中如果遇到验证码,不要重复刷新请求,先停10-15分钟再尝试,或者配套打码服务通过校验后再继续爬。
内容的提问来源于stack exchange,提问作者Louis Moon
相关产品推荐
相关产品推荐

