记一次遇到的反爬虫和解决方案
核心问题
在该网站内通过点击可以进入该网页,但是直接在浏览器中输入该网页的网址则会跳转触发验证码机制,如果已经进入了该网页,通过刷新可以继续访问该网页。
原因分析与解决方法
无法直接通过浏览器输入网址进入该网页的原因可能有如下几点:
- 直接访问网址没有Cookie,因此会被阻拦。
- 通过点击进入网页和刷新网页可以正常访问,而无法直接通过网址访问,可能是请求头的差异。
- 通过点击可以访问网页,可能是网站通过JS生成了临时令牌。
通过浏览器的开发者工具对刷新网页的请求头和直接通过网址进入网页的请求头进行抓包分析,发现:
- 刷新的请求头多了一个
referer: https://xxxx.com,而直接网址访问的请求头没有referer - 刷新的请求头的
sec-fetch-site与直接网址访问的不同:- 刷新的请求头:
sec-fetch-site: same-origin - 直接访问的请求头:
sec-fetch-site: none
- 刷新的请求头:
通过在爬虫中添加和修改这两个请求头,可以假装以刷新的方式进入该网页并正常获取数据。
记一次遇到的反爬虫和解决方案
https://blog.shinebook.net/2025/11/05/编程/Python/爬虫/记一次遇到的反爬虫和解决方案/