本人是一个刚入社会的小爬虫,在工作期间因为网站反爬也是被虐的体无完肤。每天努力学习,现在自我感觉应该已经是一个初级小爬虫的了,来整理一下以往所遇到的反爬机制。
headers
这个比较简单了,一般网站也就是一个user-agent,不过不行,那就是还有referer、cookie等其他request headers。
data/json
一些请求有可能在你添加了headers后仍然无法获取到想要的数据,那么就要看看是不是存在form data,如果存在就尝试一下data或者json。
cookie
这个我感觉是可以分为两个分支的。
第一个分支,主要就是以登陆cookie为主,登陆后才可以请求到数据(以淘宝为例吧),这个需要获取到登陆后的cookie,然后添加到headers中再次请求页面。
第二个分支,主要是以cookie来做验证,就是根据一些用非正常手段访问该网站而生成的特征值或缺少特征值,不让你能获取到正确的数据,这种的话你就要找到该网站是如何验证的,然后避免被他检查出来(以携程为例吧)。
验证码
这个也需要分几个分支
第一个分支是图片验证码,如果图像验证码是数字/字母格式的,可以使用ocr图像识别来识别对应的验证码,不过存在识别问题,有时图像处理不好的话,是无法识别出对应验证码内容的;如果是汉字或者图片筛选类验证码的话,需要用到打码平台了。
第二个分支是滑块验证码,需要用到selenium,如果是有缺口的那种验证码(以哔哩哔哩为例吧),需要找到缺口位置,再拖动滑块,如果只是一个滑动条,滑动即可。
第三个分支是短信验证码,这个我觉得可以尝试截取验证码接口,来解决验证码问题,但是这个办法我不会(笑哭),我用的是一个手机短信转发app,转发到微信或者邮箱,然后就可以曲线救国了。
访问限制
这个一般是对ip和账号的限制(以百度指数为例吧),需要设置延迟,降低访问频率,创建ip池,更换ip防止ip被封,创建cookie池,防止账号被封。
字体加密
这种情况,一般网站会对一些关键信息进行字体加密(以58同城为例吧),也就是你可以看到关键信息,但是你的爬虫程序获取到的却是一堆看不懂的数据,这是就需要找到该网站的woff文件进行解密替换,然后才能获取到相应的数据。
伪元素
::before 和 ::after(以汽车之家为例吧),这个需要找到getPropertyValue
ajax/js
有的接口是暴露出来的,我们可以轻易的找到并获取它,但是有的接口就不容易找到了,我们就需要去逆向分析它的ajax/js源码,debug调试,然后才能获取到接口和一个参数。不行可以尝试selenium
selenium的检测
一般是通过window.navigator.webdriver检测的,不过还有一些其它特征值和webdrive.exe的特征值,需要分析源码,判断网站是如何检测selenium的
目前就这些了,想到其他的反爬再更新。