爬虫系统的制作方法

文档序号:10512237阅读:336来源:国知局
爬虫系统的制作方法
【专利摘要】本发明实施例提供一种爬虫系统,包括:网页分析器,用于对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务;任务模块,用于将所述爬取任务存储到任务队列;以及爬虫模块,用于从所述任务队列中获取所述爬取任务,爬取网页数据。本发明实施例的爬虫系统和爬虫方法,在网页分析中执行DNS查询,避免DNS查询在爬取过程中造成管道阻塞,提高爬虫效率。
【专利说明】
爬虫系统
技术领域
[0001]本发明涉及网页搜索技术,尤其涉及一种网页爬虫系统及方法。
【背景技术】
[0002]网络爬虫是一个自动提取网页的程序,它为搜索引擎从互联网(internet)上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的统一资源定位符(URL)开始,获得初始网页上的URL,然后启动爬虫模块抓取网页,在网页抓取过程中,不断从当前页面上抽取新的URL放入队列并继续进行分析,如此周而复始,直到遍历完整个互联网后者满足系统的一定停止条件时停止。
[0003]由于爬虫模块在抓取网页数据时,从URL地址,因此需要通过URL获取网页的IP地址以及访问端口,在此过程中,由于非法URL地址可能导致爬虫模块长时间阻塞,导致爬取任务停止,影响整个系统的爬取效率。

【发明内容】

[0004]有鉴于此,本发明提供一种防止DNS阻塞的爬虫系统和爬虫方法,以解决上述问题。
[0005]根据本发明的一个方面,提供一种爬虫系统,包括:网页分析器,用于对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务;任务模块,用于将所述爬取任务存储到任务队列;以及爬虫模块,用于从所述任务队列中获取所述爬取任务,爬取网页数据。
[0006]优选地,所述网页分析器和所述爬虫模块在不同的进程或线程中执行。
[0007]优选地,所述爬虫分析器在本地缓存网页URL地址和IP地址的映射关系,以及将非法域名保存到黑名单。
[0008]优选地,所述爬虫模块包括:第一调度单元,用于从所述任务队列获取所述爬取任务,分发到多个工作队列;爬取单元,用于从所述工作队列中获取所述爬取任务,根据所述爬取任务从WEB服务器爬取所述网页数据;配置单元,用于根据配置文件配置所述第一调度单元和爬取单元。
[0009 ]优选地,所述任务队列和工作队列通过REDIS数据库存储。
[0010]优选地,所述配置单元启动多个线程执行所述第一调度单元和所述爬取单元,一个所述爬取单元的线程对应一个所述工作队列。
[0011]优选地,所述网页分析器包括:第二调度模块,用于获取所述网页数据,并根据所述网页数据提取网页URL;DNS工作模块,用于根据所述网页URL从所述DNS服务器获取IP地址,并生成所述爬取任务;推送模块,用于将所述爬取任务存储到所述任务模块。
[0012]优选地,所述爬取任务包括IP地址、URL地址、爬取深度。
[0013]根据本发明的另一个方面,提供一种爬虫方法,包括:网页分析步骤:对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务,并将所述爬取任务存储到任务队列;以及爬取步骤:从所述任务队列中获取所述爬取任务,爬取网页数据。
[0014]优选地,所述网页分析步骤和所述爬取步骤在不同的进程或线程中执行。
[0015]优选地,还包括:在本地缓存网页URL地址和IP地址的映射关系,以及将非法域名保存到黑名单。
[0016]优选地,所述任务队列和工作队列通过REDIS数据库存储。
[0017]优选地,所述爬取步骤启动多个线程爬取网页数据。
[0018]优选地,所述爬取任务包括IP地址、URL地址、爬取深度。
[0019]本发明实施例提供一种爬虫系统,包括:网页分析器,用于对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务;任务模块,用于将所述爬取任务存储到任务队列;以及爬虫模块,用于从所述任务队列中获取所述爬取任务,爬取网页数据。本发明实施例的爬虫系统和爬虫方法,在网页分析中执行DNS查询,避免DNS查询在爬取过程中造成管道阻塞,提高爬虫效率。
【附图说明】
[0020]通过参照以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
[0021 ]图1是本发明实施例的爬虫系统的部署图;
[0022]图2是本发明实施例的爬虫系统的时序图;
[0023]图3是本发明实施中的网页分析器的时序图;
[0024]图4是本发明实施例的爬虫模块的配置单元的流程图;
[0025]图5是本发明实施例的爬虫模块的第一调度单元的流程图;
[0026]图6是本发明实施例的爬虫模块的爬虫单元的流程图;
[0027]图7是本发明实施例的爬虫模块的爬虫单元中接收数据的流程图。
【具体实施方式】
[0028]以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
[0029]图1是本发明实施例的爬虫系统的部署图。如图1所示,爬虫服务器、REDIS服务器和WEB服务器协同工作,完成网页数据的爬取。其中,REDIS服务器指安装REDIS数据存储管理系统的服务器,用于存储爬取任务、记录已爬网页等信息。爬虫服务器负责从WEB服务器爬取网页,并将网页存储在本地;再从已爬取网页中抽取有效URL放入REDIS任务队列。WEB服务器包括各个互联网服务提供商提供的网页服务器,如门户网站:腾讯、新浪、凤凰网等。REDIS服务器只是一种存储爬取任务的存储示范,对本领域的技术人员来说,其他存储方式也能达到相同的效果,例如,采用MQ存储消息队列,或将爬取任务存储到ORACLE数据库,但是REDIS数据库在高并发性的数据存储和检索方面具有优势。
[0030]本发明实施例所述的爬虫系统部署在爬虫服务器上。根据功能划分,这里将爬虫系统包括:网页分析器、任务模块和爬虫模块,网页分析器对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务;任务模块将爬取任务存储到REDIS服务器上的任务队列;爬虫模块从任务队列中获取爬取任务,爬取网页数据。在一个优选的实施例中,网页分析器和爬虫模块分别在两个不同的进程或线程中工作,通过任务模块进行消息传递。这样做的益处是异步操作避免阻塞。
[0031]爬虫模块按功能划分包括第一调度单元、爬虫单元和配置单元。第一调度负责从任务队列获取爬取任务,分发到多个工作队列;爬取单元从工作队列中获取爬取任务,根据爬取任务从WEB服务器爬取网页数据;配置单元根据配置文件配置第一调度单元和爬取单元的所需环境变量。
[0032]在爬虫模块启动时,首先调用配置模块对系统资源进行初始化,创建执行第一调度单元和爬取单元的线程池,并为每个爬取线程申请一个工作队列。第一调度线程、爬取线程、网页分析器、DNS服务器和WEB服务器的交互关系如图2所示。
[0033]在图2中,网页分析器首先对网页数据进行分析,生成爬取任务,通过任务模块的任务进程存储到REDIS队列。第一调度线程从REDIS队列获取任务,分配给每个爬取线程对应的工作队列,每个爬取线程定时从对应的工作队列中读取任务,从WEB服务器上获取网页数据,并从网页数据中提取URL地址、IP、端口、摘要等信息,形成网页数据的索引文件,并将网页数据存储到磁盘上。网页分析器再继续对已经爬取到本地的网页数据分析,获取网页中未爬取的相关URL地址,生成新的爬取任务存放到REDIS服务器上的任务队列中。
[0034]图3示出了本发明实施例中的网页分析器的时序图。
[0035]网页分析器包括第二调度模块、DNS工作模块和推送模块。第二调度模块获取网页数据,并根据网页数据提取网页URL JNS工作模块根据网页URL从DNS服务器获取IP地址,并生成爬取任务。推送模块将爬取任务推送到任务模块。图3中的第二调度线程执行第二调度模块的功能,DNS工作线程执行DNS工作模块的功能,推送线程执行推送模块的功能。
[0036]第二调度线程首先从本地磁盘读取网页数据,将未爬取的URL提交给DNS工作线程,DNS工作线程从DNS服务器查询获得URL地址和IP地址的映射关系,并发给推送线程,推送线程将生成的爬取任务推送到任务模块的任务进程。在一个优选的实施例中,DNS工作线程将URL地址和IP地址的映射关系缓存到本地数据库,避免对已查询的URL地址重复查询。另外,DNS工作线程同时在本地保存URL地址黑名单,对非法URL地址进行存储。这样,DNS工作线程可以在每次查询URL地址之前,都通过本地缓存和URL黑名单进行URL地址校验,以提高DNS查询效率。
[0037]图4是本发明实施例的爬虫模块的配置单元的流程图。如图4所示的配置单元包括步骤401-406。
[0038]在步骤401中,解析输入选项。输入选项可指定配置文件路径、是否后台运行、显示帮助信息等。
[0039]在步骤402中,锁住进程。由于在一个目录可能同时运行多个爬虫进程,将可能出现进程间通信混乱、爬取网页覆盖等问题。进程启动时加文件锁,可有效防止此问题的出现。
[0040]在步骤403中,加载配置数据。根据输入选项加载指定配置文件,为后续初始化做准备。
[0041 ]在步骤404中,判断配置数据是否异常。如果配置数据异常,程序结束,如果配置数据正常,执行步骤405。
[0042]在步骤405中,创建工作队列。工作队列用来存储爬虫将要爬取的网页URL、服务器IP+端口等信息。
[0043]在步骤406中,创建线程池。爬虫进程中存在爬虫线程池、调度线程池等。其中爬虫线程负责从WEB服务器上爬取网页,调度线程负责将REDIS队列中的任务分发到工作队列中。
[0044]图5是本发明实施例的爬虫模块的第一调度单元的流程图。如图5所示的第一调度单元包括步骤501-509。
[0045]在步骤501中,连接REDIS服务器。第一调度线程需要从REDIS服务器获取爬取任务,因此需要创建与REDIS服务器的连接上下文。注意:REDIS服务器连接不是线程安全的,因此,要么单个线程独用该连接,要么使用过程中使用互斥锁。
[0046]在步骤502中,睡眠指定时间。
[0047]在步骤503中,判断调度状态是否为运行。调度状态存在2种状态:运行态和暂停态。当处于运行态时,则允许从REDIS服务器获取爬取任务;当处于暂停态时,则不允许从REDIS服务器获取爬取任务。从而通过对调度状态的控制,来控制爬虫爬取的网页数量。
[0048]在步骤504中,从已申请的工作队列里获取工作队列空间。由于爬取任务最终需要放入到工作队列,为了防止从REDIS队列中获取到爬取任何后才发现工作队列空间不足的问题,因此,在循环中得首先为爬取线程申请工作队列空间。此时申请队列空间,也会减少后续“解析爬取任务”的数据拷贝次数。
[0049]在步骤505中,申请空间足够。判断是否能申请到足够的工作队列。如果是,执行步骤506,否则执行步骤502。
[0050]在步骤506中,从REDIS服务器获取爬取任务。根据REDIS上下文以及LPOP命令可获取指定REDIS队列的数据。
[0051 ] 在步骤507中,判断获取成功,如果成功,执行步骤508,否则执行步骤502。
[0052]在步骤508中,解析爬取任务。解析并提取XML格式爬取任务中的有效数据。
[0053]在步骤509中,放入工作队列。将获取到的任务分发到不同的工作队列。
[0054]图6是本发明实施例的爬虫模块的爬虫单元的流程图,包括步骤601-606。
[0055]在步骤601中,初始化爬虫任务。初始化任务包括获取爬取任务以及为该任务分配资源等处理。在此并没有采用事件通知机制管理否需要获取爬取任务,而是每次循环都判断是否需要获取爬取任务。此过程中还包括连接WEB服务器、拼装GET请求、设置事件通知(写)、注册事件回调以及相关的资源分配等处理。
[0056]在步骤602中,判断是否收到一个事件通知。收到可读或可写事件通知,执行步骤604,否则执行步骤603。
[0057]在步骤603中,超时删除连接。由于WEB服务器众多,各自的状态都不相同,发送GET请求后,应答的时间也各有长短,甚至根本就没有应答信息。为了防止WEB服务器长期不响应,长期占用系统资源,将强制关闭超时无响应的连接。
[0058]在步骤604中,获得一个可读或可写的连接。在步骤602中,收到一个可读或可写的连接事件通知,在本步骤中,获取发生上述事件通知的连接。
[0059]在步骤605中,在一个可读的连接上,接收应答数据。接收WEB-SVR返回的GET应答数据,并最终将应答数据同步磁盘。此过程需要用来缓存机制提高性能,并且接收完毕后,关闭该网络连接。
[0060]在步骤606中,在一个可写的连接上,发送GET请求。将发送链表中的GET请求发送给WEB服务器,如果发送完成,则设置响应读事件。
[0061]图7是本发明实施例的爬虫模块的爬虫单元中接收数据的流程图,包括步骤701-708。
[0062]在步骤701中,接收数据。使用读操作接收应答数据,最重要的是对其返回值N的相关判断和处理。
[0063]在步骤702中,判断返回值N。
[0064]在步骤703中,解析数据,本地缓存。当回值N>0,表示收到了长度为η的数据。则其后续处理包括抽取HTTP头部信息;如果此时缓存中数据长度超过缓存阈值时,则进行同步操作;如果实际接收长度与HTTP头部中的长度相等,则认为接收完毕,需要进行缓存的处理。
[0065]在步骤704中,判断错误码errno值。当返回值N〈0,通过步骤此时errno为EINTR,则表示读操作被中断,需要继续调用读取操作,执行步骤701;此时errno为EAGAIN时,表示此次所有数据接收完成,等待下次事件通知继续接收数据,程序结束;此时errno为EINTR和EAGAIN之外的值时,表示出现异常情况,执行步骤706,
[0066]在步骤705中,判断是否接收完毕。如果是,执行步骤706,否则执行步骤701。
[0067]在步骤706中,同步缓存。
[0068]在步骤707中,创建索引文件。
[0069]在步骤708中,释放网络连接。
[0070]在步骤706-708中,当返回值N = 0,说明服务器主动断开了与网络连接,将缓存中的数据同步至磁盘,并释放相关资源。
[0071]本发明实施例提供一种爬虫系统,包括:网页分析器,用于对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务;任务模块,用于将所述爬取任务存储到任务队列;以及爬虫模块,用于从所述任务队列中获取所述爬取任务,爬取网页数据。本发明实施例的爬虫系统和爬虫方法,在网页分析中执行DNS查询,避免DNS查询在爬取过程中造成管道阻塞,提尚爬虫效率。
[0072]本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。例如,在实际应用中,可以不同的需要将上述模块功能划分为和本发明实施例不同的功能结构,或将本发明实施例中的几个功能模块合并和分解成不同的功能结构。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。
[0073]以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种爬虫系统,其特征在于,包括: 网页分析器,用于对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务; 任务模块,用于将所述爬取任务存储到任务队列;以及 爬虫模块,用于从所述任务模块中获取所述爬取任务,爬取网页数据。2.根据权利要求1所述的爬虫系统,其特征在于,所述网页分析器和所述爬虫模块在不同的进程或线程中执行。3.根据权利要求2所述的爬虫系统,其特征在于,所述爬虫分析器在本地缓存网页URL地址和IP地址的映射关系,以及将非法域名保存到黑名单。4.根据权利要求1所述的爬虫系统,其特征在于,所述爬虫模块包括: 第一调度单元,用于从所述任务队列获取所述爬取任务,分发到多个工作队列; 爬取单元,用于从所述工作队列中获取所述爬取任务,根据所述爬取任务从WEB服务器爬取所述网页数据; 配置单元,用于根据配置文件配置所述第一调度单元和爬取单元。5.根据权利要求4所述的爬虫系统,其特征在于,所述任务队列和工作队列通过REDIS数据库存储。6.根据权利要求4所述的爬虫系统,其特征在于,所述配置单元启动多个线程执行所述第一调度单元和所述爬取单元,一个所述爬取单元的线程对应一个所述工作队列。7.根据权利要求1所述的爬虫系统,其特征在于,所述网页分析器包括: 第二调度模块,用于获取所述网页数据,并根据所述网页数据提取网页URL; DNS工作模块,用于根据所述网页URL从所述DNS服务器获取IP地址,并生成所述爬取任务; 推送模块,用于将所述爬取任务存储到所述任务模块。8.根据权利要求1所述的爬虫系统,其特征在于,所述爬取任务包括IP地址、URL地址、爬取深度。9.一种爬虫方法,包括: 网页分析步骤:对网页进行分析,并从DNS服务器获取网页的IP地址,生成爬取任务,并将所述爬取任务存储到任务队列;以及 爬取步骤:从所述任务队列中获取所述爬取任务,爬取网页数据。10.根据权利要求9所述的爬虫方法,其特征在于,所述网页分析步骤和所述爬取步骤在不同的进程或线程中执行。11.根据权利要求9所述的爬虫方法,还包括:在本地缓存网页URL地址和IP地址的映射关系,以及将非法域名保存到黑名单。12.根据权利要求9所述的爬虫方法,其特征在于,所述任务队列和工作队列通过REDIS数据库存储。13.根据权利要求9所述的爬虫方法,其特征在于,所述爬取步骤启动多个线程爬取网页数据。14.根据权利要求9所述的爬虫方法,其特征在于,所述爬取任务包括IP地址、URL地址、爬取深度。
【文档编号】G06F17/30GK105868258SQ201511001550
【公开日】2016年8月17日
【申请日】2015年12月28日
【发明人】邹奇峰
【申请人】乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1