专利名称:一种实现网络爬虫任务的方法
技术领域:
本发明涉及网络爬虫技术领域,更具体地说,涉及网络爬虫任务的实现方法,主要用于医疗信息系统。
背景技术:
网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件后终止运行。目前实用的网络爬虫程序通常采用分布式,分布式网络爬虫包含多个爬虫,每个爬虫需要完成的任务和单个的爬行器类似,它们从互联网上下载网页,并把网页保存在本地的磁盘,从中抽取URL并沿着这些URL的指向继续爬行。由于并行爬行器需要分割下载任务,可能爬虫会将自己抽取的URL发送给其他爬虫。这些爬虫可能分布在同一个局域网之中,或者分散在不同的地理位置。网络爬虫的任务分配没有固定的模式,不同的爬虫的任务分配方法也都不尽相同。任务分配的首要前提是不重复分配任务,重复的任务会影响程序的效率。当然,任务分配也必须保证不能漏掉任务。一个好的任务分配应该根据情况采取不同的分配方式,以达到最优效果。现有技术的网络爬虫通常是针对预先设定的特定网站设计的,当目标网站及其爬取参数设定好后难以修改,如需要爬取其他网站内容时,通常需要重新设计网络爬虫程序。
发明内容
本发明目的在于提供一种高效的建立爬虫任务的方法,通过设置客户端的配置参数,灵活修改解析器、执行器的部分代码就可以实现爬取所需的信息内容。从而本发明实现了一个通用的网络爬虫任务框架,按照本发明的方法,只需要简单修改即可完整特定网站的网络爬虫任务,使得网络爬虫系统的可扩展性大大增强。为了达到上述目的,本发明提供了一种实现网络爬虫任务的方法,硬件部分包括互联网中的服务器和客户端,所述客户端包括解析器、执行器。其中,所述解析器,利用正则表达式从待爬取的网站中解析出下一层待爬网页链接地址。所述执行器,用于将爬取的信息存入存储设备,以及为待爬网页链接地址设置爬取顺序的优先级。客户端,用于向所述服务器发送新任务,向数据库中添加未完成任务信息;以及从所述服务器的响应队列中请求已经从网站上爬取到的内容,在所述数据库中标记对应的任务已经完成;解析得到的响应,如果需要继续爬取,则将待爬网页链接地址封装成任务请求发送到所述服务器并在所述数据库中记录,否则将响应到的内容保存;此外,用于从数据库中读取未完成的任务,重新发送给所述服务器。本发明具体实现过程包括如下步骤
Step1、初始给所述客户端一个或多个待爬网页的链接地址或客户端从数据库中取出一个最优待爬网页的链接地址Step 2、所述客户端将待爬网页的链接地址封装成任务请求发送到所述服务器;Step 3、所述服务器向待爬取页面发送HTTP请求,并把请求到的多信息返回给相应的所述客户端。Step4、所述客户端接收所述多信息,并对所述多信息做以下操作Step41、所述执行器将所述多信息中所需要的信息存储到硬盘;St印42、所述解析器利用正则表达式从所述多信息解析出下一层待爬网页链接地址;St印43、所述执行器为S42中所述下一层待爬网页链接地址设置爬取顺序优先级,Step44、将所述下一层待爬网页链接地址加入到所述数据库中的待爬列表中;Step 5、重复上述St印1-4,依次完成所述数据库中的待爬列表中的网页爬取。其中,步骤Step4中,所述多信息是由服务器返回到所有信息,既包括需要爬取的有用信息,也包括无用信息,以及下一层待爬取网页的链接地址等信息。而所述多信息中所需要的息是指需要爬取的有用息。优选方式下,上述Step43的具体过程为在网络爬虫运行之前,根据链接的层级人工为每一层级的待爬网页链接地址分别分配一个优先级区间;而后,网络爬虫运行时,所述执行器为待爬网页链接地址在其优先级区间中随机分配一个优先级值,从而在所述数据库中的待爬列表中完成了最优待爬网页的链接地址的设定。 本发明为爬取不同的网站内容提供了 一个通用的网络爬虫框架,通过使用本方法可以快速完成编写用于爬取某个特定网站的爬虫。使用这种办法,只需要重新编写客户端的解析器、执行器的少量代码,无需改变服务器的代码就可以实现爬取一个全新网站的网络爬虫。因而这种方法极大降低了开发人员的开发难度,缩短了开发周期。由于这种方法是建立在分布式网络爬虫框架的基础之上,因此爬取网站的速度也可以得到保证。本发明可用于医疗信息系统。
图1是本发明网络爬虫的实施的流程示意图;图2是客户端与服务器互动的流程示意图;图3是本发明网络爬虫用于医师信息软件系统中一个待爬网页的信息情况示意图;图4是针对图3网页源代码的情况示意图。
具体实施例方式如图1所示,本发明一种高效的建立爬虫任务的方法,包括以下步骤A、根据所需获取信息的互联网地址生成编写存储不同页面链接相关信息数据的模板;B、根据所需获取信息的链接地址特点编写提取相应链接的解析器;
C、编写执行器,同时设定爬取不同页面的优先级;D、启动服务器和客户端,爬取网站内容;E、如爬虫运行意外终止,重新启动服务器、客户端,客户端可从数据库中获取未完成任务队列中的任务,实现断点续传。实施例一种用于医师数据库系统的网络爬虫任务建立方法,具体指一种用于爬取不同网站时快速实现爬取相应网站的快速、稳定网络爬虫的方法。
具体实施方式
如下A、在步骤Sll中,编写存储页面链接地址的模板。本步骤为每个需要爬取的页面建立一个存储页面链接地址信息的模板,该模板相当于一个页面地址空白记录本,可用于保存爬取页面的链接地址以及页面所在深度的信息。例如,万方论文详细信息页面地址链接为
·
(http: / / d_wanfangdata.com.cn / Periodical_ahzylczz201203001. aspx),其页面深度为3,那么就模板中存储的内容为上述地址链接及深度值3。B、在步骤S12中,编写链接解析器。首先,建立正则表达式,分析需要爬取的网站,并根据需要爬取的每个页面链接地址的特点,编写一个可以从网页内容中提取出这一类页面链接地址的正则表达式;其次,编写链接解析器的具体执行方法。链接解析器的输入为一个表示网页内容的字符串,解析器使用正则表达式从网页内容中提取出符合需求的链接,将这些链接存储在步骤A编写的模板中并作为返回结果返回。例如,要编写从万方论文列表的网页内容中提取指向论文详细信息页面的链接解析器,首先需要编写一个提取链接的正则表达式"〈ahref=,( <Url>http: / / d. wanfangdata. com. cn / Periodical」+ \·aspx),X <Name>. + ) </a>〃,然后在解析器中编写方法根据正则表达式提取出链接。图3是万方论文列表一个页面,图4是这个页面的源代码。源代码作为输入,使用解析器进行解析,将网页内容中显示五篇文章的链接提取出来,提取得到的链接分别是
I]· http: / / d. wanfangdata. com. cn / Periodical_ahzylczz201203001. aspx
2]. http: / / d. wanfangdata. com.cn / Periodical_ahzylczz201203002.aspx
3]. http: / / d. wanfangdata. com. cn / Periodical_ahzylczz201203003.aspx
4]. http: / / d. wanfangdata. com. cn / Periodical_ahzylczz201203004.aspx
_5]. http: / / d. wanfangdata. com. cn / Periodical_ahzylczz201203005.aspx。解析后将上述链接及其对应的页面深度存储在相应的模板中。C、在步骤S13中,编写执行器。为了使客户端可以正常工作,还需要实现一个提交爬行任务的执行器。执行器为解析器从响应内容中提取出的链接设定优先级,并把没有被爬取过的链接封装成爬取任务集合作为函数的返回结果返回给服务器。执行器通常格式固定,采用默认执行器,如所需爬取的网站内容有特定的目录结构,还需要在默认执行器基础上进行修改,例如39健康网网站使用省市区划的目录结构,因此执行器需要预先建立省市区划的目录结构等。D、在步骤S13中,设定优先级。对于每个网页,客户端的执行器都会给予该页面任务一个优先级的值,爬虫程序通过该优先级值的大小顺序控制爬取的顺序,本发明通过优先级设定来平衡多个分布式网络爬虫的爬取内容。具体方法是首先为每个层次页面分配一个优先级区间,接着在程序运行过程中,对每个页面在其对应的优先级区间内随机分配一个优先级值,优先级值大的页面会首先被爬取。例如,如果万方的论文列表的页面优先级区间设置为[30,80],万方论文详细信息页面的优先级区间设置为[1,50],一个万方论文列表的页面 A (http: / / c. wanfangdata. com. cn / Periodica1-ahzylczz. aspx)的优先级值被分配为35,两个万方论文详细信息的页面BI(http: / / d. wanfangdata. com. cn / Periodical_ahzylczz201203001. aspx)的优先级值被分配为 30, B2 (http: / / d. wanfangdata. com. cn / Periodical_ahzyIczz
201203002. aspx )的优先级值被分配为60,这三个页面被爬取的顺序是B2、A、BI。E、在步骤S21中,服务器与客户端之间通过WCF协议进行通信。客户端从待爬取的网页地址队列中获取网页地址,封装成HTTP请求并发送给服务器。服务器接收从客户端发来的待爬取网页地址的请求,同时向相应的网址发送请求,并将请求到的内容返回给客户端;客户端从服务器返回的内容中提取出待爬取的网页链接地址,并将其加入到待爬取队列中,直到整个网站爬行完毕。客户端通过WCF协议与服务器之间进行通信。客户端通过正则表达式解析出有用的URL地址,在将解析出来的URL封装成请求发送给服务器之前,需要检查数据库中是否已经存在对应的请求,如果请求存在就不需要再次发送,因为请求过的页面就不需要再次处理;反之如果不存在,就将请求发送给服务器,并将URL存储在数据库中。F、在步骤S22中,如果爬虫在爬行过程中意外终止,本爬虫并不需要从头开始爬取。只需要重新启动服务器、客户端,客户端将从数据库中读入还没有完成的爬行任务,然后将重新向服务器发送请求直到整个网站爬行完毕。根据上述内容,归纳本发明的实现过程如下1.客户端获取待爬网页的链接地址。为了使网络爬虫可以正常爬取网站,需要给客户端初始爬行链接地址,初始链接地址可以是一个或多个。2.客户端从数据库的待爬链接列表中取出一个待爬链接地址,并将此链接地址发送给服务器。3.服务器向待爬取页面发送HTTP请求,并把请求到的内容A返回给相应的客户端。4.客户端接收服务器返回的爬取到的内容A,需要对内容A做以下操作I)客户端的执行器将内容A存储到硬盘中。2)客户端的解析器利用正则表达式从内容A中解析出需要的链接B (解析出的链接可能是一个或多个)。例如图3是万方论文列表一个页面的一部分,用方框圈出来的是五篇论文名称;图4是这部分网页内容的源代码,用方框圈出来的是指向这五篇论文的链接地址,用绿色方框圈出的是这这些链接的相同部分,经过观察发现,这些链接不同的地方就是两个绿色方框之间的一部分字符,这部分在正则表达式中可以用通配符来匹配。这样就可以编写出一个提取出这些链接的正则表达式“〈a href=//( <Url>http://d. wanfangdata. com. cn/Periodical_. + \. aspx)〃>”。正则表达式中的“Url>”表不匹配结果保存在Url中。用这个正则表达式就可以从图4的网页内容中提取出如下五个网页链接[I]· http://d. wanfangdata. com. cn/Periodical_ahzylczz201203001. aspx[2].http://d. wanfangdata. com. cn/Periodical_ahzylczz201203002. aspx[3]. http://d. wanfangdata. com. cn/Periodical_ahzylczz201203003. aspx [4]. http://d. wanfangdata. com. cn/Periodical_ahzylczz201203004. aspx[5],http://d. wanfangdata. com. cn/Periodical_ahzylczz201203005. aspx。3)客户端的执行器为步骤2)中提取出的链接B设置优先级,具体做法如下在网络爬虫运行之前,需要人工为即将要爬取的每个层次页面分配一个优先级区间;这样,在程序运行过程中,程序会对每个页面在相应的优先级区间内随机分配一个优先级值,优先级值大的页面会首先被爬取。例如,如果万方的论文列表的页面优先级区间设置为[1,50],万方论文详细信息页面的优先级区间设置为[30,80],一个万方论文列表的页面A (http://c. wanfangdata. com. cn/Periodical-ahzylczz. aspx)的优先级值被分配为 35 (在区间[I, 50]内随机分配),两个万方论文详细信息的页面BI (http://d. wanfangdata. com. cn/Periodical_ahzylczz201203001. aspx)的优先级值被分配为30 (在区间[30, 80]内随机分配),B2 (http://d_wanfangdata.com.en/P eriodical_ahzylczz201203002. aspx)的优先级值被分配为60 (在区间[30,80]内随机分配),这三个页面被爬取的顺序是B2、A、BI。根据这种方法,通过设置页面爬取的优先级就可以控制页面被爬取顺序。4)将从内容中提取出来的链接地址B加入到数据库中的待爬列表中。5.重复步骤2-4上述过程中如下功能均由客户端完成一、向服务器发送新任务,向数据库中添加该未完成任务信息;二、从服务器的响应队列中请求已经从网站上爬取到的内容,在数据库中标记对应的任务已经完成。解析得到的响应,如果需要继续爬取,则将需要爬取页面的URL封装成任务请求发送到服务器并在数据库中记录,否则将响应到的内容保存;三、恢复模式从数据库中读取未完成的任务,重新发送给服务器(如图2所示)。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
权利要求
1.一种实现网络爬虫任务的方法,其特征在于, 硬件部分包括互联网中的服务器和客户端,所述客户端包括解析器和执行器; 所述解析器,利用正则表达式从待爬取的网站中解析出下一层待爬网页链接地址;所述执行器,用于将爬取的信息存入存储设备,以及为待爬网页链接地址设置爬取顺序的优先级; 具体实现过程包括如下步骤 51、初始给所述客户端一个或多个待爬网页的链接地址或客户端从数据库中取出一个最优待爬网页的链接地址; 52、所述客户端将待爬网页的链接地址封装成任务请求发送到所述服务器; 53、所述服务器向待爬取页面发送HTTP请求,并把请求到的多信息返回给相应的所述客户端。
54、所述客户端接收所述多信息,并对所述多信息做以下操作 541、所述执行器将所述多信息中所需要的信息存储到硬盘; 542、所述解析器利用正则表达式从所述多信息解析出下一层待爬网页链接地址; 543、所述执行器为S42中所述下一层待爬网页链接地址设置爬取顺序优先级; 544、将所述下一层待爬网页链接地址加入到所述数据库中的待爬列表中; 55、重复上述过程,依次完成所述数据库中的待爬列表中的网页爬取。
2.根据权利要求1所述实现网络爬虫任务的方法,其特征在于,S43的具体过程为在网络爬虫运行之前,根据链接的层级人工为每一层级的待爬网页链接地址分别分配一个优先级区间; 而后,网络爬虫运行时,所述执行器为待爬网页链接地址在其优先级区间中随机分配一个优先级值,从而在所述数据库中的待爬列表中完成了最优待爬网页的链接地址的设定。
全文摘要
本发明公开了一种实现网络爬虫任务的方法,1.初始给所述客户端待爬网页的链接地址;2.客户端将待爬网页的链接地址封装成任务请求发送到服务器;3.服务器向待爬取页面发送HTTP请求,并把请求到的多信息返回客户端;4.客户端接收信息,并对信息进行处理5.重复上述过程,依次完成待爬列表中的网页爬取。本发明为爬取不同的网站内容提供了一个通用的网络爬虫框架,通过使用本方法可以快速完成编写用于爬取某个特定网站的爬虫。这种方法极大降低了开发人员的开发难度,缩短了开发周期。由于这种方法是建立在分布式网络爬虫框架的基础之上,因此爬取网站的速度也可以得到保证。本发明方法可用于医疗信息系统。
文档编号G06F17/30GK102999549SQ201210360608
公开日2013年3月27日 申请日期2012年9月25日 优先权日2012年9月25日
发明者金博 申请人:金博