反爬虫的方法
文章目录
- 反爬虫的方法
- 1、robots.txt配置 ——反爬等级 ★
- 2、User-Agent检测 ——反爬等级 ★
- 3、账户进行访问控制 ——反爬等级 ★★
- 4、有限数据访问 ——反爬等级 ★★★
- 5、访问频率限制 ——反爬等级 ★★★
- 6、cookie/token等有效时间 ——反爬等级 ★★★
- 7、ip黑名单 ——反爬等级 ★★★
- 8、ID连续性问题——反爬等级 ★★★★
- 9、JS动态加载 ——反爬等级 ★★★★
- 10、信息图片化 ——反爬等级 ★★★★
- 11、接口加密 ——反爬等级 ★★★★
- 12、接口加密 ——反爬等级 ★★★★★
- 13、验证码 ——反爬等级 ★★★★★
- 14、自定义字体 ——反爬等级 ★★★★★
- 15、信息混淆策略 ——反爬等级 ★★★★★
- 建议
- 参考
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p3sqHifW-1571190770832)(https://img.shields.io/badge/作者-周晶-green)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q39W1LAV-1571190770833)(https://img.shields.io/badge/时间-2019年09月12日-green)]
前言:爬虫和反爬虫总是相对的,有了新的爬虫技术就会出现新的反爬虫技术,有了新的反爬虫技术就会再出现新的反爬虫技术如此往复,所以我们要做的:首先规避掉一些简单粗暴的爬虫,尽可能增加爬虫的爬取难度,加大爬取得信息解析难度,重要信息限制访问。
1、robots.txt配置 ——反爬等级 ★
说明:这个文件来告诉搜索机器人不要爬行我们的部分网页,俗称君子协议。
- 实现方案:(例如禁止360爬虫禁止爬取我们的一些文件夹)
User-agent: 360spider
Disallow: /admin/ 后台管理文件
Disallow: /require/ 程序文件
Disallow: /attachment/ 附件
Disallow: /images/ 图片
Disallow: /data/ 数据库文件
-
优点:
可以告诉那些知名网站搜索引擎等不要爬取自己不想被爬取得内容。
-
缺点:
由于非强制的,可以遵守也可以不遵守,这就导致很多爬虫私下并不遵守这个协议,还是会非法爬取内容,限制性比较弱。
2、User-Agent检测 ——反爬等级 ★
说明:无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers,这里面的大多数的字段都是浏览器向服务器”表明身份“用的,对于爬虫程序来说,最需要注意的字段就是:User-Agent。
很多网站都会建立 user-agent白名单,只有属于正常范围的user-agent才能够正常访问。
- 实现方案:(例如采用拦截器拦截到每一个请求,取得Header,拿到User-Agent)
- 白名单法:首先设置自己的白名单用户代理集,包括市面上主流的代理,抓到请求的UA进行对比,如果包含,则通过,否则请求不予通过;
- 黑名单法:python、java、php这些程序爬虫会携带这些信息,由于白名单难以完全穷举市面所有UA,所以可以采用黑名单法,禁止包含这些的请求通过。
-
优点:
可以过滤一小部分简单粗暴的爬虫 。
-
缺点:
大多数爬虫都会伪造这些UA,所以此法也会经常失效 。
3、账户进行访问控制 ——反爬等级 ★★
说明:每个用户拥有不通权限,爬虫一般只有普通用户的权限,不通用户看到的信息量不一样。
-
实现方案:
对不通用户访问数据权限不一样,比如管理员可以访问全部内容,但是普通用户只能看到自己那部分,游客只能看到几条数据,像微信的朋友圈陌生人只能看到10条内容,自己也可以设置半年可见,则爬虫获取不到你的全量信息。
-
优点:
可以很好的隐藏宝贵数据 。
-
缺点:
很多网站不适用,比如信息网的房源数据普通游客也是能看得到的 。
4、有限数据访问 ——反爬等级 ★★★
说明:对用户不会任意返回所有的数据,比如只给半年的数据权限。
-
实现方案:
调用接口请求数据时候只返回限制页数比如50页数据或者只有半年数据允许访问,超过阈值则禁止访问更多数据,像微博的粉丝不允许看到全部粉丝只能看到一部分。
-
优点:
爬虫爬不到全部数据有可能就放弃,很好的保证数据安全性 。
-
缺点:
很多网站不适用,需要全量数据访问 。
5、访问频率限制 ——反爬等级 ★★★
说明:对规定时间访问过多的用户封禁IP地址。
-
实现方案:
在redis中以访问IP为key,访问次数为value,设置过期时间,达到阈值,则封禁用户或者跳出验证码都可以。
-
优点:
保护服务器防止压力过大 。
-
缺点:
容易误伤普通用户 。
6、cookie/token等有效时间 ——反爬等级 ★★★
说明:限制登录用户时间。
-
实现方案:
对cookie或者token设置过期时间爬虫一般会一直在线不断爬取,这种需要强制其下线,重新登录。
-
优点:
加大爬虫爬取难度 。
-
缺点:
用户体验差点 。
7、ip黑名单 ——反爬等级 ★★★
说明:对一些已知的爬虫封禁其IP地址。
-
实现方案:
建立IP和名单表,设置拦截器请求到来时候首先进行IP解析然后和黑名单池做对比,一旦发现属于黑名单禁止访问,对于后面发现的不正常访问的地址也进行加入黑名单。
-
优点:
可以封禁一些顽固爬虫的访问 。
-
缺点:
现在网上很多IP代理池,爬虫会不断的换IP地址进行爬取 。
8、ID连续性问题——反爬等级 ★★★★
说明:由于大多数数据表会使用数据库主键自动生成机制,这样会导致爬虫程序按照有序的ID自己生成ID来爬取数据。
-
实现方案:
如可以自定义生成随机主键方案,或者使用UUID。
-
优点:
避免爬虫按ID规律顺序抓取内容 。
-
缺点:
ID不连续在查找定位问题时候可能没那么方便,但是无伤大局 。
9、JS动态加载 ——反爬等级 ★★★★
说明:对价格手机号等敏感信息懒加载。
-
实现方案:
设置按钮,需要用户需要点击才能显示。
-
优点:
保护重要信息不被爬虫直接获取 。
-
缺点:
用户体验差点 。
10、信息图片化 ——反爬等级 ★★★★
说明:对价格以及手机号采用图片显示方式。
-
实现方案:
存储手机号之前将手机号生成图片存储在图片服务器然后返回key存储在数据库,返回给用户时候返回一个key。
-
优点:
这部分信息图片显示爬虫即使爬到也难以解析,这样可以让其不再爬取 。
-
缺点:
界面用户体验不是很好 。
11、接口加密 ——反爬等级 ★★★★
说明:后台返回的是加密数据。
-
实现方案:
后端采用加密算法如对称加密或者非对称加密算法,md5,sha等,前端对数据进行解析。
-
优点:
这样即使爬虫拿到链接得到的数据也是加密过的数据,难以解析 。
-
缺点:
前后台工作量比较大 。
12、接口加密 ——反爬等级 ★★★★★
说明:对网站图片加水印如:中云数据。
-
实现方案:
在图片保存之前加上水印。
-
优点:
爬虫即使爬到信息也不能直接使用,增加爬虫门槛 。
-
缺点:
政府部门不一定同意增加水印 。
13、验证码 ——反爬等级 ★★★★★
说明:访问重要信息需要输入验证码。
-
实现方案:
访问敏感信息时候弹出验证码窗口,需要用户输入一个表达式计算结果正确才能够继续访问调取接口数据。
-
优点:
爬虫一般难以应对验证码这些技术 。
-
缺点:
用户体验不是很好 。
14、自定义字体 ——反爬等级 ★★★★★
说明:页面显示896但是查看网页源码却是325,效果:页面表现效果和网页源码对不上。
-
实现方案:
比如价格手机号信息数字0123456789可以在前端封装一套字体为3659842301等,后端根据相同规则返回数据,前端直接用自定义字体库进行显示。
-
优点:
增加了爬虫解析难度,甚至难以捉摸其规律,还可以定期变更规律 。
-
缺点:
可能执行效率低点 。
15、信息混淆策略 ——反爬等级 ★★★★★
说明:页面显示的数据查看源代码是乱码数据。
-
实现方案:
可以采用css3的自定义字体前端配合来做 。
-
优点:
增加页面解析难度 。
-
缺点:
页面复杂化 。
建议
上述反爬虫方案可以按照反爬等级,逐一实现,变成可配置的方式,如开关方式。
之后针对项目的需求进行配置可以使用的反爬虫方案。