1.反爬的诞生
网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。
但是一旦网络爬虫被滥用,互联网上就会出现太多形似同质,换汤不换药的内容,使得原创得不到保护。
于是反爬诞生了。很多网站开始反网络爬虫,想方设法保护自己的内容。他们根据ip访问频率,浏览网页速度,账户登录,输入验证码,flash封装,ajax混淆,js加密,图片识别等技术,来应对网络爬虫。
防的一方不惜成本,迫使抓取的一方在考虑成本效益后放弃抓取。抓的一方不惜成本,使防的一方在考虑用户流失后放弃防护。真可谓一阴一阳谓之道,一黑一白成太极。
2.常见四大反爬机制及应对策略
所谓兵来将挡,水来土掩。有反爬,必然就有破反爬。下面我们就来聊聊常见的四大反爬机制及应对策略。
(1)User-Agent + Referer检测
User-Agent 是HTTP协议的中的一个字段, 其作用是描述发出HTTP请求的终端的一些信息。使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
应对策略: 伪装浏览器的User-Agent,因为每个浏览器的User-Agent不一样,并且所有的用户都能使用浏览器。所有每次请求的时候条件浏览器的User-Agent,就能解决UA检测。
Referer 是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的。例如有一些图片网站在你请求图片的时候,就会检测你的Referer值,如果Referer不符合,不会返回正常的图片。
应对策略:在检测referer的请求中,携带符合的referer值。
(2)JS混淆和渲染
a.JavaScript 混淆,基本就是:
①去掉一些实际没有调用的函数。②将零散的变量声明合并。
③逻辑函数的精简。④变量名的简化。
具体要看不同的压缩工具来考虑其优劣程度。常见的JS压缩工具有UglifyJS、JScrambler等。
b.JS渲染
JS渲染其实就是对HTML页面的修改。比如有一些网页本身并没有返回数据,其数据是经过js加载之后才添加到HTML当中的。
当遇到这种情况的时候,我们要知道爬虫是不会执行JavaScript操作。所以需要用其他的方法处理。
应对策略:
通过查看网站js源码,找到关键的代码,并用python实现。通过查看网站js源码,找到关键的代码,用PyV8等库直接执行js代码。通过selenium库直接模拟浏览器环境。
(3)IP限制频次
IP限次也是一种常见的反爬手段。WEB系统都是走http协议跟WEB容器连通的,每次请求至少会产生一次客户端与服务器的tcp连接。
对于服务端来说,可以很清楚的看到一个IP地址在单位时间内发起的请求。当请求数超过一定的值之后,就可判断为非正常的用户请求,进而对其IP进行限制。
应对策略:
自行设计ip代理池,通过轮换的方式,每次请求携带不同的代理地址。利用ADSL动态拨号的独有的特点。ADSL每拨一次号,就获取一个新的IP。也就是说它的IP是不固定的。
(4)验证码
验证码(CAPTCHA)英文全称为“Completely Automated Public Turing test to tell Computers and Humans Apart”。
中文含义为:全自动区分计算机和人类的图灵测试,是一种区分用户是计算机还是人的公共全自动程序。
验证码可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
验证码的基本思想是:验证码问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
应对策略:
手动识别验证码。pytesseract识别简单的验证码,其中pytesseract是Python中一个基础的文字识别库。对接打码平台。