反爬虫技术

网站可以进行如下几种常见反爬虫策略,有些是从网上看到的,有些是在做爬虫过程中遇到的,以后看到其他类型会继续更新

User-Agent/Referer

最简单的反爬虫技巧了,通过获取访问者的headers中的参数来限制返回的返回内容,不过也由于是基础款,只要认真学习几天爬虫知识,就知道如何避免这种限制,当然,对于初学者还是有点用的

IP限制

对于访问频率特别高的IP频段,直接禁止访问
非常狠的一招,网站再怎么反爬虫,毕竟还是为了展示使用的。限制了IP,直接就相当于对某些人把网站关闭了,即使是正常访问都不行,比如12306把我们公司网段就屏蔽了,在公司根本不能买票,当然像12306这么壕的网站也不多,可以不在乎用户,像百度网盘,在限制IP几分钟后就会开放,也就是如果在短时间内多次访问会暂停服务几分钟,过段时间会再开启
当然,我们可以通过设置IP代理池解决IP限制问题

JS脚本

JS本身作为一种语言,网页上几乎没有它不能做的了,所以有很多种通过js限制的方法,而且反爬虫和爬虫之间的博弈一般也通过js展开,网站开发人员不断加大js难度,记载数据方式,爬虫开发不断突破
下面介绍几种js反爬技术,比如:

加载敏感数据

  1. 比如某些简易款音乐网站,反爬虫做的不是特别好,只是简单的在打开播放页面的时候,使用js加载MP3文件路径到标签,甚至json内容都可以直接request到,做这种反爬根本没有意义啊,或者说本就没有想着反爬?难度等级:一颗星。例:9sky
  2. 稍微增强一些的,会在初次加载页面后(request只能获取到这里的信息)使用js重新向后台发起请求,获取json或者其他类型的数据,将需要的内容加载到html页面上,这种稍微难度可大可小,只要能找到js获取json的请求api就不存在限制,使用F12的network,或者filder等专业的协议调试工具,可以查看到页面打开后网络请求,或者直接通过页面上js的路径,找到js直接看源码(需要懂一点js知识)难度等级:两颗星吧,例:九酷
  3. 更强一些的加载敏感数据方法,有些会在js复杂度上做文章,比如,加密js,增加js大小,使查找真正数据的难度变得更大等等,但是终归,只要稍微花点时间认真研究一下,都可以突破。难度等级:三颗星
  4. 在这方面做的最好的,或者说一直在更新反爬技术的网站(还以音乐网站举例)一个是酷狗,一个网易云,其他的比如QQ音乐,百度音乐什么的,都需要特定用户才能访问,虽然可以通过设置cookie解决,但是你首先得有个cookie吧
    网易云音乐将播放做到了一个插件里面(猜测),爬虫无法直接获取到文件地址,酷狗应该是做了虚拟路径,每次页面加载完之后,这个文件的路径就不可以再用了(mp3文件路径中有只有一个文件夹的名称是好多无需字符,应该是生成的,每次刷新,同一个音乐的其他路径不变,这个文件夹会变,且不能通过url访问)这俩难度有五颗星了
    还有一个比较有难度的是12306,只要是做爬虫的,都想试试12306,不过12306一直都在更新验证方式,在我爬取的时候它还是通过js访问特定接口获取数据,然后添加到html,最近没有看

验证码

一般出现验证码都会和后台配合使用,比如在检查到异常的User-Agent或者IP的时候,让用户输入由图片显示的验证码,如果验证错误,那么肯定不会显示正确信息了,现在验证码也有好多种,验证图片内容的,通过图像识别技术很多时候都可以穿过,所以又有一种新的,需要滑动的验证码,怎么说呢,所有网站都是可以爬取的,只看是否愿意付出这么大的精力

JS的限制

使用js来放爬虫有个不足之处就是可以通过PhantomJs或者headless 谷歌来突破,不过这个也可以防范,只是成本问题了

字符替换

  1. 字体
    刚看到这个的时候我也很好奇,字体怎么防爬虫?刚好最近做的网站也有用到新的字体,虽然我没试,不过觉得也挺好的,在安装的字体上打乱字的排序,比如数字1和2.排序变为2 1这样在显示2这个数字的时候,显示出来的却是1,但是爬虫是分辨不出来的,因为我们并没有安装这个字体,这样就达到反爬虫的效果了,不过需要注意的是,后台要做好内容转换
  2. 插入字符
    在正常的文本里插入一些乱七八糟的字符,然后通过css隐藏掉,这样在浏览器显示是没有问题的,但是爬虫就会出现一堆乱码,不过只要我们知道规律,直接把无用字符替换掉就可以了(我怎么又带入爬虫角度了,明明是在写反爬虫)
  3. 背景图
    做好一些css的背景图,在一些敏感数据处,显示这些对应的样式,从而将真正的信息隐藏掉,比如需要显示数字“9”,有一个class的背景图为“9”,这个时候
    就可以了,不过对于信息比较多,或者数据变动比较大的情况就比较麻烦了

robots.txt

这个对于就是要爬取你网站的人,是没用的,就是一个君子协定,指明这个网站哪些可以爬取,哪些不可以爬取

你可能感兴趣的:(html,javascript,python,网站部署)