0
点赞
收藏
分享

微信扫一扫

Python爬虫Requests 403(Please verify you are a human)解决方法

gy2006_sw 2022-01-12 阅读 66
python爬虫

最近在爬stockx交易数据的时候遇到了很严格的反爬。在上了随机header和ip pool的情况下,爬几十个页面就被PerimeterX的验证拦下了(403 Please verify you are a human),然后就是无论怎么换都一直403。用selenium+优化过的driver确实可行,但是速度实在是太慢了,而且pose data的时候不太方便,因此还是想用requests库看能不能绕过反爬。花了一些时间终于弄明白了他们的反爬机制,所以写一篇文章记录一下。

经过多次测试,我发现Stockx的防御措施有以下几种:

  1. 记录访问的User-Agent,同一个header大量访问就会塞验证
  2. 同一ip访问间隔太短会塞验证
  3. ban了一个header+ip的组合以后,接下来访问同一链接的其他人通通塞验证
  4. (不确定)某些访问量高的页面无差别验证所有访问者
  5. pose数据时referer要求提交具体的商品页面,不能直接用官网
  6. 高峰时间无差别验证所有访问者

解决方案如下:
1和2:用生成器生成一个新的User-Agent和ip池,然后在抓取过程中把失败User-Agent和ip的remove掉。我一开始用Fake-UserAgent库来随机获取User-Agent,结果发现一直被ban,估计是用的人太多都被网站记录在案了。
3和4:几次访问失败后暂停一段时间或者记录并跳过失败链接。
5:pose header data时把页面的referer也附上.
6:换个时间跑即可。另外在cookie换地区似乎是可行的。

总归不是光彩事情,源代码就不放了。希望能对大家的思路有所帮助。

举报

相关推荐

0 条评论