您的位置:首页 >新闻资讯 > 正文

代理IP突破反爬虫技巧分享(上)

来源:互联网 作者:admin 时间:2019-11-07 15:08:58

  大数据在各个领域开始普遍使用,网络爬虫变得非常常见。很多网站也对爬虫进行了防御,设置了反爬虫机制,增加了难度,因为如果太多的爬虫来抓取,会对自家的服务器产生负担。代理IP下面针对网站常见的反爬方法进行了汇总,可以帮助大家顺利爬虫。


  1、IP反爬


  服务器会检测某个IP在单位时间内的请求次数,如果超过了这个阈值,就会直接拒绝服务,返回一些错误信息,这种情况可以称为封IP。封IP也分为永久被封和短时被封。


  永久被封:进入黑名单中的IP永久不能访问


  固定时段被封:IP一段时间失效


  解决方案:


  采用代理突破IP访问限制,常规方法就是购买代理服务或者购买VPS服务器自己构建代理IP池


  2、通过网页请求头反爬


  这是网站最基本的反爬措施,也是最容易实现的反爬,但是破解起来也容易,只需要合理添加请求头即可正常访问目标网站获取数据。


  3、验证码反爬


  验证码反爬也是目前很多网站常用的一种反爬机制,随着技术的发展,验证码的花样也越来越多。验证码最初是几个数字组合的图形验证码,后来加入英文字母和混淆曲线。有的网站还可能加入中文字符验证码.


  遇到有验证码的网页,目前就两种解决方案,一种是购买验证码识别服务,这些识别服务本身也是他们后台人工去识别之后通过接口返回识别结果;另一种是自己训练识别模型进行识别。此处主要介绍自己处理验证码的方案,对接服务的方式可以找对应识别平台依据API文档完成识别对接。


  1)字符验证码:


代理IP突破反爬虫技巧分享


  普通字符识别,目前深度学习可以做到比人眼识别更高的准确率。可以通过深度学习来自己开发识别服务接口,流程如下:

代理IP突破反爬虫技巧分享

  一般训练样本都是通过爬虫对接实际的打码平台,进行数据的采集,保存正确的样本作为模型训练样本。目前训练样本所需量和样本类别大概关系为:样本类别数X 500,比如数字加字母36个类别训练所需要的样本量为36*500=18000。训练样本越多,得到的模型识别率越高,但是相对来说成本越高。实际训练中发现,针对字母+数字形式验证码10000以上样本就可以得到一个可用的识别模型。


  汉字识别和普通字符识别一样,仅仅需要的样本量比较大,模型结构和训练过程一样。上图中有一种验证码是需要输入指定颜色的字符,这种验证码和字符验证码识别类似,但是需要两个模型进行配合处理,及颜色识别模型和字符识别模型。颜色识别模型负责输出图片字符对应颜色序列,字符输出模型负责输出对应图片字符。实际训练中发现颜色识别模型很少样本就可以得到99.99%的识别率,模型收敛很快;但是字符验证码由于加入了3500种汉字,实际训练时训练样本100万(由代码模拟生成),识别率95%以上,训练时间相对很长(GPU会快很多)。

代理IP突破反爬虫技巧分享

  深度学习训练验证码识别模型一些心得:


  模型设计可以设计成通用结构,每次只需要修改输出类别个数,模型可以复用。对于图片大小不一致问题可以采取缩放到统一尺寸来解决。


  字符验证码目前都是不需要区分大小写的,同时每个平台的字符验证码可能把容易混淆的字符剔除了,所以字符验证码实际的类别输出并没有36种。通过对训练样本进行统计就可以找到缺失字符,这样可以减少输出类别数。另外一个注意点就是,有些网站的字符验证码可能不是定常的,每次返回的验证码是可变长度的,对于这种验证码可以按照最大长度设计模型,长度不够的用下划线补齐,但是一定要合理选择补齐位置,才能得到较好的识别准确率。


  2)行为验证码:


  a、坐标点选:

代理IP突破反爬虫技巧分享

  坐标点选也可以直接对接打码平台,提交图片数据到打码平台,打码平台返回坐标值,通过Seleniun、PhantomJS模拟点击对应坐标,完成验证。或者直接构造参数提交即可。


  深度学习训练模型进行识别,自己训练模型需要的样本量比较大,训练成本比较高。汉字点选验证码相对需要的训练样本比较少。针对汉字点选验证码提供一种识别思路:

代理IP突破反爬虫技巧分享

  这种验证码在获取到图片中的字符之后,最关键的一步是需要按照正确的语序去点击图片中的字符,所以需要有一个语序模块依据输入的字符给出正确的语序顺序,最简单的方式就是对字符所有的排序通过Jieba库进行分词,得到最长分词序列即为正确结果。或者基于自然语言处理训练语序模型进行排序。


  最后一步也就是模拟点击过程,简单的方式是采用浏览器模拟点击,这种通过率相对较高,实现容易。另一种方式为分析参数加密过程,直接构造参数提交,JS逆向有一定难度,技术要求较高,优点是程序执行效率较高。


  b、滑动验证:

代理IP突破反爬虫技巧分享

  滑动验证码识别的关键是确定缺口需要滑动的距离、构造滑动轨迹。轨迹计算最通用的方式就是通过OpenCV库使用图像处理算法来计算滑块滑动距离,目前网上主流的几家滑动验证码都可以采用这种算法来计算得到滑动距离。轨迹构造,轨迹构造的原则就是尽量模拟人滑动的过程,比如网上常见的先加速后减速或者利用正态分布曲线构造轨迹(实际实现效果较好,参数方便修改)。得到距离和轨迹之后,采用Seleniun、PhantomJS模拟滑动,但是这种方式存在的问题就是效率比较低。


  更好的办法是在得到滑动距离和滑动轨迹之后直接分析JS参数构造过程,逆向JS,得到提交参数,直接向后台提交数据通过验证。技术要求比较高,需要一定的JS逆向能力,但是爬取效率较高。


  在下一篇文章中,ET代理会继续带来关于反爬解决方案的分享,大家请继续关注。


相关文章内容简介