一般网站从三个方面反爬虫:请求网站访问时的请求头Headers,用户行为,目标网站的目录和数据加载方式。前两个方面反爬虫策略中最为常见的,而第三个则是应用ajax(异步加载)的方式加载页面目录或者内容,增大爬虫在对目标网站形成访问之后获取数据的难度。

但是仅仅检验一下请求头或者做几个ip限制显然无法达到网站运营者对anti-spam的要求,所以更进一步的反制措施也不少。最主要的大概有:Cookie限制,验证码反爬虫,以及Noscript。

1.1 通过Headers反爬虫

从用户请求的Headers反爬虫是最常见的反爬虫策略。由于正常用户访问网站时是通过浏览器访问的,所以目标网站通常会在收到请求时校验Headers中的User-Agent字段,如果不是携带正常的User-Agent信息的请求便无法通过请求。还有一部分网站为了防盗链,还会校验请求Headers中的Referer字段。 如果遇到了这类反爬虫机制,可以直接在自己写的爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;另外通过对请求的抓包分析,将Referer值修改为目标网站域名,就能很好的绕过。

1.2 基于用户行为反爬虫

还有一些网站会通过用户的行为来检测网站的访问者是否是爬虫,对访问频率进行限制,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。 大多数网站都是前一种情况,对于这种情况有两种策略:

1)使用代理ip。例如可以专门写一个在网上抓取可用代理ip的脚本,然后将抓取到的代理ip维护到代理池中供爬虫使用,当然,实际上抓取的ip不论是免费的还是付费的,通常的使用效果都极为一般,如果需要抓取高价值数据的话也可以考虑购买宽带adsl拨号的VPS,如果ip被目标网站被封掉,重新拨号即可。

2)降低请求频率。例如每个一个时间段请求一次或者请求若干次之后sleep一段时间。由于网站获取到的ip是一个区域网的ip,该ip被区域内的所有人共享,因此这个间隔时间并不需要特别长

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。对于有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制,如果能有多个账户,切换使用,效果更佳。

1.3 动态页面的反爬虫

上述的几种情况大多都是出现在静态页面,但是对于动态网页,我们需要爬取的数据是通过ajax请求得到,或者通过JavaScript生成的。首先用Firebug或者HttpFox对网络请求进行分析。如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。

能够直接模拟ajax请求获取数据固然是极好的,但是有些网站把ajax请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。还有一些严防死守的网站,除了加密ajax参数,它还把一些基本的功能都封装了,全部都是在调用自己的接口,而接口参数都是加密的。

遇到这样的网站,我们就不能用上面的方法了,通过selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据(上述的通过添加

Headers一定程度上就是为了伪装成浏览器),它本身就是浏览器,phantomJS就是一个没有界面的浏览器,只是操控这个浏览器的不是人。

1.4 Cookie限制(登陆限制)

和Headers校验的反爬虫机制类似,当用户向目标网站发送请求时,会再请求数据中携带Cookie,网站通过校验请求信息是否存在Cookie,以及校验Cookie的值来判定发起访问请求的到底是真实的用户还是爬虫,第一次打开网页会生成一个随机cookie,如果再次打开网页这个Cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。

而Cookie校验和Headers的区别在于,用户发送的Headers的内容形式是固定的可以被轻易伪造的,Cookie则不然。原因是由于,我们在分析浏览器请求网站访问的过程中所分析得到的Cookie往往都是经过相关的js等过程已经改变了domain的Cookie,假如直接手动修改爬虫携带的Cookie去访问对应的网页,由于携带的Cookie已经是访问之后的domain而不是访问之前的domain,所以是无法成功模拟整个流程的,这种情况必然导致爬虫访问页面失败。 分析Cookie,可能会携带大量的随机哈希字符串,或者不同时间戳组合的字符串,并且会根据每次访问更新domain的值。对这种限制,首先要在对目标网站抓包分析时,必须先清空浏览器的Cookie,然后在初次访问时,观察浏览器在完成访问的过程中的请求细节(通常会在这一过程中发生若干次301/302转跳,每次转跳网站返回不同的Cookie给浏览器然后在最后一次转跳中请求成功)。在抓包完成对请求细节的分析之后,再在爬虫上模拟这一转跳过程,然后截取Cookie作为爬虫自身携带的Cookie,这样就能够绕过Cookie的限制完成对目标网站的访问了。

1.5 验证码限制

这种验证码可以通过OCR技术进行简单的图像识别破解,但是现在来说,验证码的干扰线,噪点已经多到肉眼都无法轻易识别的地步。所以目前而言,由于OCR技术发展不力,验证码技术反而成为了许多网站最有效的手段之一。

验证码除了识别难题之外,还有另外一个值得注意的问题。现在有许多网站都在使用第三方验证码服务。当用户打开目标网站的登录页面时,登录页面显示的验证码是从第三方(比如阿里云)提供的链接加载的,这时候我们在模拟登录的时候,需要多一步从网页提供的第三方链接抓取验证码的步骤,而这一步常常暗含着陷阱。以阿里云提供的验证码服务为例,登录页面的源代码会显示阿里云提供的第三方链接,但是当匹配出这个链接进行验证码抓取的时候我们会发现验证码是无效的。当仔细分析抓包的请求数据之后,发现正常浏览器在请求验证码时,会多带一个ts参数,而这个参数是由当前时间戳产生的,但是并不是完全的时间戳,而是时间戳四舍五入保留九位数字之后的字符串,对待这种第三方服务只能是细心加运气,三分天注定七分不信命来猜一发了。还有另外一种特殊的第三方验证码,所谓的拖动验证,只能说,互联网创业有三种模式2b,2c,2vc。

常见反爬虫策略 及应对措施相关推荐

  1. python爬取网页防止重复内容_python解决网站的反爬虫策略总结

    本文详细介绍了网站的反爬虫策略,在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.这里我们只讨论数据采集部分. 一般网站从三个方面 ...

  2. Scrapy绕过反爬虫策略汇总

    文章目录 一.Scrapy无法返回爬取内容的几种可能原因 1,ip封锁爬取 2,xpath路径不对 3,xpath路径出现font,tbody标签 4,xpath路径不够明确 5,robot协议 6, ...

  3. 各大前端巨头反爬虫策略

    各大前端巨头反爬虫策略 1. 前言 对于一张网页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它. 而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商网站的交易额,教育 ...

  4. 【Python3爬虫】常见反爬虫措施及解决办法(二)...

    [Python3爬虫]常见反爬虫措施及解决办法(二) 这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法.同样的,如果对你有帮助的话,麻烦点一下推荐啦. 一.防盗链 这次我遇到的防盗链,除了 ...

  5. 常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)

    常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10) 文章目录 联系方式 反爬虫策略 文本混淆 SVG映射 CSS文字偏移 图片混淆伪装 字体反爬 Referer字段反爬 数据分 ...

  6. python应对反爬虫策略_如何应对网站反爬虫策略?如何高效地爬大量数据?

    看了回答区,基本的反爬虫策略都提到了,下面说几个作为补充. 1.对于处理验证码,爬虫爬久了通常网站的处理策略就是让你输入验证码验证是否机器人,此时有三种解决方法:第一种把验证码down到本地之后,手动 ...

  7. 爬虫原理及反爬虫机制以及反爬虫方法的应对策略

    爬虫原理及反爬虫机制 关于爬虫 爬虫原理 反爬虫机制 1.检验数据头User-Agent反爬虫机制解析: 2.访问频率限制或检验 3.蜜罐技术 反爬虫机制的应对方法 1.设定Request Heade ...

  8. Scrapy应对反爬虫策略

    一.设置用户代理 设置User Agent模拟浏览器,在Scrapy框架中,有四种方法设置User Agent. 1.在settings.py中·直接设置User Agent. 2.在settings ...

  9. 反击“猫眼电影”网站的反爬虫策略

    0×01 前言 前两天在百家号上看到一篇名为<反击爬虫,前端工程师的脑洞可以有多大?>的文章,文章从多方面结合实际情况列举了包括猫眼电影.美团.去哪儿等大型电商网站的反爬虫机制.的确,如文 ...

  10. 代理ip网站开发_网站反爬虫策略,用代理IP都能解决吗?

    很多人会使用到网页采集器,其实这也是通过程序来进行采集的,如果没有使用代理IP,采集速度快了,照样是会被封住的.另外,这些网站还有其他的一些反爬策略,同样也会影响到我们采集网页的数据,这是如何限制的呢 ...

最新文章

  1. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
  2. SAP WM 确认TO单据的时候修改目的地Storage Bin
  3. 异常(try...catch...finally、throws、throw)
  4. layui导入模板数据_实物资产管理软件操作手册(数据接口)
  5. python每天学多久_怎么自学python,大概要多久?
  6. test函数java,js中test()函数在正则中使用
  7. 戴尔软件部门第一弹 收购备份公司AppAssure
  8. C++string基本概念
  9. python itchat模块登录失败_itchat模块的不明错误
  10. 第五章 整合视图层技术
  11. 蓝桥杯 java 跳马问题
  12. 无人值守地磅称重系统方案的设计原理
  13. Android 设备Id 唯一不重复,Redmi
  14. 扫盲贴2.5寸移动硬盘的厚度有几种
  15. 数据挖掘神经网络算法,人工神经网络分析方法
  16. 团体程序设计天梯赛-练习集)(5分)
  17. element ui 日历空控件添加农历 节气和家假日
  18. vs 2019使用Installer Project制作安装包的问题
  19. Android P(9.0) 证书加密算法变更
  20. nacos下载安装(Windows)

热门文章

  1. java treetable_00035-layui+java 树形表格treeTable(异步请求)
  2. mysql sql语句for循环语句怎么写_mysql循环语句for循环
  3. 2020-06-10
  4. OK插件安装常见问题集锦(PowerPoint版)|OneKeyTools Lite安装说明
  5. Java Web 前端到后台常用框架介绍
  6. 小爱同学app安卓版_小爱同学app下载安卓版-小爱同学 安卓版v2.9.42-pc6手机下载...
  7. 打开其他软件时,老是弹出Xftp6安装的问题
  8. 拼多多商品详情接口、拼多多商品基本信息、拼多多商品属性接口
  9. 基于imx6ul下调试tlv320aic3x声卡
  10. Python查看函数源码