一种拦截爬虫的方法与流程

文档序号:12906361阅读:239来源:国知局

本发明涉及网络技术,特别涉及一种拦截爬虫的方法。



背景技术:

网络爬虫是搜索引擎技术的基础组成部分。网络爬虫技术是从一个或若干初始网页的url(uniformresourcelocator,统一资源定位符)开始,获得初始网页上的url,在抓取网页信息的过程中,根据网页的抓取策略,不断从当前网页上抽取新的url放入队列,直到满足某种停止条件。然后将抓取到的网页信息存储在搜索引擎的服务器中。

现有技术中,为了确保正常用户的访问,有些网站采取过滤用户ip的方法,或者过滤http请求的特定ua(user-agent,用户代理)头的方法来拦截来自网络爬虫的访问,但是,在访问量非常大的情况下,当很多正常用户共用一个ip的情况下,会将这些正常用户误认为是网络爬虫从而被过滤掉。另一方面,根据http协议规范,user-agent头的值是可以任意设置的,因此很多网络爬虫都把自己的user-agent头设置成与普通的浏览器一样来逃避过滤,所以导致拦截网络爬虫的效率不高。



技术实现要素:

本发明的目的在于提供一种拦截爬虫的方法,能够有效拦截爬虫访问。

为实现上述发明目的,本发明提供了一种拦截爬虫的方法,该方法包括:

服务器端接收到客户端发送的访问页面的访问请求后,获取访问请求中的用户ip字段、用户代理ua字段、referer字段以及cookie字段;根据过滤条件,选择所述字段的任意组合同时进行过滤,确定出不符合要求的字段;

服务器端对不符合要求的字段所对应的访问请求进行拦截,将要访问页 面的分类第一页响应给客户端。

综上所述,本发明实施例提供的拦截爬虫的方法,在本发明实施例中,服务器端接收到客户端发送的访问页面的访问请求后,获取访问请求中的用户ip字段、用户代理ua字段、referer字段以及cookie字段;根据过滤条件,选择所述字段的任意组合同时进行过滤,确定出不符合要求的字段;对不符合要求的字段所对应的访问请求进行拦截,将要访问页面的分类第一页响应给客户端。由此可见,本发明为防止爬虫影响正常用户访问服务器端,通过四种拦截手段,并行处理,来保证拦截爬虫率。因此,应用本发明之后,有效提高了爬虫的拦截率,降低了服务器的压力,保证网站稳定和高并发。并且正常用户的访问也不会被拦截。

附图说明

图1为本发明实施例拦截爬虫的方法流程示意图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。

本发明为确保浏览器的正常访问,有效拦截爬虫,通过四种拦截手段,并行处理,来保证拦截爬虫率。这四种拦截手段包括设置ip黑名单、设置ua黑名单、判断referer字段非法、判断cookie值非法,每种拦截手段都是独立并行的,互相不会影响,可以根据具体网站访问情况,在接收到客户端发送的访问页面的http请求后,采用多个拦截手段的组合,在最大程度上拦截爬虫。

本发明实施例公开了一种拦截爬虫的方法,包括以下步骤,流程示意图如图1所示。

步骤11、服务器端接收到客户端发送的访问页面的访问请求后,获取访问请求中的用户ip字段、用户代理ua字段、referer字段以及cookie字段; 根据过滤条件,选择所述字段的任意组合同时进行过滤,确定出不符合要求的字段。其中,访问请求,例如可以是http请求。

下面简单介绍一下本发明所要过滤的各个字段。

ua字段是http协议中的一部分,属于头域的组成部分。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计。

referer字段也是http协议中的一部分,属于头域的组成部分。用来告诉服务器端当前访问的资源是从哪个页面链接过来的。例如,用户点击了浏览器中a页面上的某个链接,则浏览器在向该链接发起网页访问请求时,自动在http请求的请求头信息中的referer属性中加入该a页面的url,用于表示用户在a页面的点击操作发起的向该链接的网页访问请求。

另外,本发明还利用爬虫不会执行javascript(js)方法,以及不会下载网页中的图片的特性,服务器端将生成的cookie值保存到图片中,爬虫不会下载图片,因此,在爬虫向服务器端发送的http请求中不会携带cookie值,进而通过在http请求中是否携带cookie值来区分爬虫的请求和浏览器的请求,最终实现对爬虫的有效拦截。

步骤12、服务器端对不符合要求的字段所对应的访问请求进行拦截,将要访问页面的分类第一页响应给客户端。

实施例一

服务器端根据设置的ip黑名单,对爬虫进行拦截。因此,本实施例中,

服务器端根据过滤条件,对http请求中的用户ip字段进行过滤,确定出不符合要求的字段的方法包括:

将包含在ip黑名单中的用户ip字段,作为不符合要求的字段;其中,形成ip黑名单的方法包括:对预定时间段内从客户端发来的http请求进行统计,得到该预定时间段内每个用户ip的访问次数;将同一用户ip的访问次数超过阈值的用户ip保存到ip黑名单中,形成ip黑名单。

优选地,可以进一步对超过阈值的用户ip进行验证,将未经过验证的非正常用户ip保存到ip黑名单中。

在具体实施例中,可以将1分钟内所有用户ip的访问次数进行排序,将访问次数排在前10名的用户ip保存到ip黑名单。

在另一个实施例中,可以将1分钟内所有用户ip的访问次数进行排序,查找出访问次数排在前100名的用户ip;然后对这100名的用户ip进行验证,排除正常用户ip,将余下的未经过验证的非正常用户ip保存到ip黑名单中。

在另一个实施例中,预先设置1分钟内访问次数的阈值为10。可以统计1分钟内每个用户ip的访问次数,将同一用户ip的访问次数超过10次的用户ip保存到ip黑名单中。

在另一个实施例中,预先设置1分钟内访问次数的阈值为20。可以统计1分钟内每个用户ip的访问次数,将同一用户ip的访问次数超过20次的用户ip查找出来;然后对这些访问次数超过20次的用户ip进行验证,排除正常用户ip,将余下的未经过验证的非正常用户ip保存到ip黑名单中。

因此,服务器端一旦接收到http请求后,确定用户ip包含在ip黑名单中,则将要访问页面的分类第一页响应给客户端。

实施例二

服务器端根据设置的ua黑名单,对爬虫进行拦截。因此,本实施例中,

服务器端根据过滤条件,对http请求中的ua字段进行过滤,确定出不符合要求的字段的方法包括:

将包含在ua黑名单中的ua字段,作为不符合要求的字段;其中,形成ua黑名单的方法包括:对预定时间段内从客户端发来的http请求进行统计,得到该预定时间段内每个ua字段的出现次数;根据预先设置的浏览器ua库,确定出非浏览器ua;将出现次数超过阈值的非浏览器ua保存到ua黑名单中,形成ua黑名单。

在具体实施例中,预先设置有浏览器ua库,该浏览器ua库中包含了 标准的浏览器标识。可以统计1分钟内同一个ua字段的出现次数,首先将每个ua字段与浏览器ua库进行比较,确定出非浏览器ua,然后将同一个ua字段的出现次数超过阈值的非浏览器ua保存到ua黑名单中。

因此,服务器端一旦接收到http请求后,确定ua字段包含在ua黑名单中,则将要访问页面的分类第一页响应给客户端。

实施例三

服务器端根据referer字段的合法性,对爬虫进行拦截。因此,本实施例中,服务器端根据过滤条件,对http请求中的referer字段进行过滤,确定出不符合要求的字段的方法包括:

判断http请求中的referer字段是否合法,如果所述referer字段不包含url地址,或者为空,则确定该http请求中的referer字段不符合要求。

前述已经说明,referer字段也是一个url地址,如果http请求中不包含url地址,或者为空,则说明该referer字段不合法,需要被过滤,将要访问页面的分类第一页响应给客户端。

实施例四

服务器端根据cookie值,对爬虫进行拦截。因此,本实施例中,服务器端根据过滤条件,对http请求中的cookie字段进行过滤,确定出不符合要求的字段的方法包括:

判断http请求中是否包含有效cookie值,如果不包含cookie值,或者所包含的cookie值无效,则确定该http请求中的cookie值不符合要求。

其中,服务器端接收到客户端发送的访问页面的http请求后会生成cookie值,因此,在判断http请求中是否包含有效cookie值之前,该方法进一步包括:生成当前用于识别爬虫的cookie值,并生成将所述cookie值保存到图片中的所述图片名称;将包含有所述图片名称的图片统一资源定位符url路径保存到所请求的页面中。然后,服务器端将自身生成的cookie值,与http请求中携带的cookie值进行比较,如果二者不相等,则判断http请求中携带的cookie值为无效cookie值。

url是用于完整描述因特网(internet)上网页和其他资源的地址的一种标识方法,对应的,internet上的每一个网页都具有一个唯一的url。当客户端需要访问服务器端中的网页时,就要先获取到该网页的url。

本实施例客户端发送的访问页面的http请求中,携带的是该页面的url路径信息。需要说明的是,图片url路径进一步保存在该页面中,保存的具体位置可以根据具体实现而设定,一个实施例可以是图片url路径保存在该页面的图像(image)标签中。

优选地,生成当前用于识别爬虫的cookie值的方法包括:服务器端根据cookie值的有效时间对当前时间戳的值进行选取;将所选取的当前时间戳的值与配置的当前第一密钥合并的字符串进行md5消息摘要运算,得到当前cookie值。

优选地,生成图片名称的方法包括:服务器端根据cookie值的有效时间对当前时间戳的值进行选取;将所选取的当前时间戳的值与配置的当前第二密钥合并的字符串进行md5消息摘要运算,得到图片的名称。

需要说明的是,生成cookie值和图片名称的方法有多种,包括但不限于上述方法,由于本发明中cookie值是有时效的,所以生成时与时间戳有关,其他通过时间戳获取得到cookie值和图片名称的方法都在本发明的保护范围内。

需要说明的是,本发明中,为了防止爬虫的模仿,服务器端生成的cookie值每隔预定时间是发生变化的。反过来说,假设预定时间是10分钟,则每个10分钟内,服务器端生成的cookie值是相同的。然后服务器端就会将包含该cookie值的页面返回给客户端,因此,只要客户端是浏览器,就可以将该cookie值解析出来,携带在下一个http请求中,发送给服务器端,那么,只要在同一个10分钟之内,服务器端接收的cookie值就会与服务器端自身生成的cookie值一致,这就说明该cookie值有效。如果在下一个10分钟的时候,客户端仍然携带之前的cookie值向服务器端发送http请求,服务器端又生成了新的cookie值,这就导致服务器端接收的cookie值就会与服务器 端自身生成的cookie值不一致,这就说明该cookie值无效。

在具体场景中,假设服务器端生成的cookie值每隔10分钟发生变化,即cookie值的有效时间为10分钟。则,服务器端接收到客户端发送的访问页面的http请求后,取当前时间戳的前11位,20160101081:表示2016年1月1号8点10分到19分这10分钟。因此,将20160101081和当前第一密钥合并的字符串进行md5消息摘要运算,得到当前cookie值。将20160101081和当前第二密钥合并的字符串进行md5消息摘要运算,得到图片的名称。服务器端将所得的cookie值放入图片的描述信息里,生成新的图片并以得到的图片名称对该新的图片进行命名保存,然后服务器端将包含有图片名称的图片url路径保存到所请求的页面中。这里,图片的描述信息包括但不限于拍照的时间,照片的分辨率,相机的类型等。以该图片名称命名的新的图片包含了cookie值。

如果是爬虫的话,服务器端接收到爬虫的http请求后,会将图片url路径保存到所请求的页面中。然后,服务器端判断http请求中是否包含有效cookie值,经过判断爬虫的http请求中并不带有cookie值,因此,将爬虫的请求拦截,将当前分类的第1页返回给爬虫。这样,爬虫始终获取的是当前分类的第1页,不会获取更多的页面。

如果是浏览器的话,服务器端接收到浏览器的http请求后,会将图片url路径保存到所请求的页面中。然后,服务器端判断http请求中是否包含有效cookie值,如果无效,则将当前分类的第1页返回给浏览器。如果有效则允许访问,将所请求的页面返回给浏览器。这时,浏览器根据服务器端返回的页面中包含的图片url路径将图片下载到浏览器上;用javascript方法解析图片,提取其中的cookie值,并进行保存,用于浏览器访问其他页面时在http请求中携带该cookie值。

需要注意的是,现有技术中爬虫并不会下载图片,也不会用js方法解析图片,因为,如果执行的话会大大增加爬虫的成本,包括cpu和带宽成本。因此,爬虫不会像浏览器那样提取图片中的cookie值,在访问其他页面时携 带。进而就会被服务器端拦截。因此,本实施例中正是利用了爬虫的这种特点,在服务器端根据http请求中的cookie值进行爬虫的拦截。

综上,本发明的有益效果在于,

一、本发明四种拦截爬虫手段包括设置ip黑名单、设置ua黑名单、判断referer字段非法、判断cookie值非法,每种拦截手段都是独立并行的,互相不会影响,可以根据具体网站访问情况,在接收到客户端发送的访问页面的http请求后,采用多个拦截手段的组合,在最大程度上拦截爬虫。

二、有效拦截爬虫,在正常用户访问量非常大的情况下也可以避免误杀正常用户,确保浏览器的正常访问。

三、在网站促销高峰,拦截爬虫访问,降低服务器压力,保证网站稳定和高并发。并可以对恶意攻击拦截。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1