概述
传统爬虫检测方法能检测出常规网络爬虫,但对于行为模式愈加复杂,伪装性更强的爬虫检测效果则不尽人意。而基于行为模式的爬虫检测方法能从海量访问日志中深入挖掘爬虫与正常用户在访问行为上的特征差异,提升爬虫检测效果。卷积神经网络CNN具有优秀的特征提取和降维能力,catboost是一种基于Boosting的集成学习方法,具有训练速度快、高准确率分类能力,且能处理类别型数据及数值型数据。将CNN与catboost进行结合,能够集成castboost模型分类效果好,训练样本量大时训练速度快的优点;以及卷积神经网络提取局部特征能力强,降维后保留有效信息效果好的优点,避免人工特征筛选,自动进行特征后处理。基于以上优势,本文提出一种基于机器学习的网络爬虫检测方法,通过挖掘爬虫会话与普通用户会话的访问行为特征差异,采用CNN及Catboost结合的分类算法实现对网站爬虫的自动化检测,提高检测率及检测效率。
网络爬虫检测
通过对网站访问日志进行数据预处理及会话提取,并对会话打标,将其标记为爬虫会话与普通用户会话。对打标后的会话进行特征提取,包括信息熵、周期性、请求唯一页面数、有效请求数、错误请求数、重复请求百分比、请求频率等17个维度行为特征。得到特征向量后采用基于Catboost的CNN改进算法训练出爬虫检测模型实现对网站恶意爬虫的检测。
1. 日志预处理
从多个网站的访问日志中提取出某个时间段的访问日志,并将日志进行合并。从合并日志中提取出所需字段,构造八元组信息。提取字段包括:请求ID,referer,User-Agent,请求IP,请求方法,请求时间,请求uri,响应状态码。
2. 会话提取
通过“请求IP”+“User-Agent”+“会话超时时间”对访问日志进行会话提取。具体提取过程为:首先根据请求IP和User-Agent,对访问日志进行初步会话划分。然后在每一个会话中,将访问日志按照请求时间先后排序。最后判断相邻日志的请求时间间隔是否超过会话超时时间,如果超过,则将后一条访问日志划分到下一个会话中。
3. 会话打标
会话提取之后,需要对会话进行打标,将其标记为爬虫会话或普通用户会话。会话打标流程为:搜集不同种类(包括不限于营销类、监控类、工具类、漏洞类、抓取类爬虫)的爬虫IP及User-Agent,构造已知爬虫列表。判断会话的请求IP或User-Agent是否存在已知爬虫列表,如果存在,则将该会话标记为爬虫会话,否则进行进一步判断。判断会话中是否包含对robots.txt的请求,或者会话的所有请求方法都是“HEAD”,如果满足,则将该会话标记为爬虫会话。如果不满足,进一步判断是否会话的所有请求referer都为空,并且对于图片文件的请求百分比低于阈值,如果是,则将该会话标记为爬虫会话,否则标记为普通用户会话。
4. 特征提取
爬虫与普通用户由于访问网站目的不同,因此在访问行为上存在一定差异。通过从会话中提取出17个不同维度行为特征,以此来度量爬虫与普通用户会话的差异。提取的特征包括:信息熵特征,周期性特征,各种类型文件请求百分比,请求频率,请求唯一页面数,有效html请求数,有效请求总数,请求错误百分比,无referer请求百分比,是否请求robots.txt文件,网页及文本文件请求总数等。
5. 模型训练及检测
首先将训练会话样本进行特征提取后得到17维的特征向量作为输入,CNN卷积层对输入的特征向量进行特征信息提取以及局部感知,通过卷积运算增强原始特征;然后利用池化层的最大池化对提取的特征进行下采样及特征降维;最后将优化后的特征向量输入catboost层,对特征向量进行训练,输出分类结果。通过训练出的CNN-Catboost检测模型对测试样本进行测试,划分为爬虫会话或普通用户会话,测试结果采用准确率、召回率、精度、F1值等评价指标进行训练效果评价。将待检测访问日志进行同样的预处理、会话提取、特征提取,输入CNN-Catboost检测模型,即可实现网络爬虫检测。