发明内容
本发明要解决的技术问题是:如何提供一种RSS信息分页抓取系统及方法,以保证从RSS源抽取信息时能够识别分页并抽取全文。
为解决上述技术问题,本发明提供一种RSS信息分页抓取系统,其包括:
列表建立单元,适于收集具有分页的RSS频道,建立分页频道列表;
列表分析单元,适于分析所述分页频道列表,得到对应每个RSS频道的分页标签;
代码获取单元,适于当从RSS源抓取信息时,如果作为当前信息来源的目标RSS频道属于所述分页频道列表,则获取所述当前信息对应的页面代码;
标签查找单元,适于在所述页面代码中查找所述目标RSS频道对应的分页标签;
分页组合单元,适于根据查找到的分页标签获得各分页对应的页面,组合各分页对应的页面,得到完整的RSS信息。
其中,所述列表分析单元进一步包括:
网页提取模块,适于依次取出所述分页频道列表中的每个RSS频道,找到所述RSS频道中具有分页的网页;
标签对应模块,适于分析所述具有分页的网页的页面代码,找到其中的分页标签作为相应RSS频道所对应的分页标签。
其中,所述代码获取单元进一步包括:
信息抓取模块,适于从RSS源抓取信息;
判断模块,适于判断作为当前信息来源的目标RSS频道是否属于所述分页频道列表;
代码获取模块,适于当作为当前信息来源的目标RSS频道属于所述分页频道列表时,获取所述当前信息对应的页面代码。
其中,所述分页组合单元进一步包括:
URL获取模块,适于根据查找到的分页标签得到各分页的URL;
正文获取模块,适于根据各分页的URL获得各分页的页面代码,从所述页面代码中抽取各分页的正文;
分页组合模块,适于组合各分页的正文,得到完整的RSS信息。
其中,所述系统还包括:
推送单元,适于将所述完整的RSS信息推送给用户。
本发明还提供一种RSS信息分页抓取方法,其包括步骤:
收集具有分页的RSS频道,建立分页频道列表;
分析所述分页频道列表,得到对应每个RSS频道的分页标签;
当从RSS源抓取信息时,如果作为当前信息来源的目标RSS频道属于所述分页频道列表,则获取所述当前信息对应的页面代码;
在所述页面代码中查找所述目标RSS频道对应的分页标签;
根据查找到的分页标签获得各分页对应的页面,组合各分页对应的页面,得到完整的RSS信息。
其中,所述分析所述分页频道列表,得到对应每个RSS频道的分页标签具体包括:
依次取出所述分页频道列表中的每个RSS频道,找到所述RSS频道中具有分页的网页;
分析所述具有分页的网页的页面代码,找到其中的分页标签作为相应RSS频道所对应的分页标签。
其中,所述当从RSS源抓取信息时,如果作为当前信息来源的目标RSS频道属于所述分页频道列表,则获取所述当前信息的页面代码具体包括:
从RSS源抓取信息,判断作为当前信息来源的目标RSS频道是否属于所述分页频道列表,如果是,获取所述当前信息对应的页面代码;否则,认为所述当前信息对应的网页不存在分页,结束流程。
其中,所述根据查找到的分页标签获得各分页对应的页面,组合各分页对应的页面,得到完整的RSS信息具体包括:
根据查找到的分页标签得到各分页的URL;
根据各分页的URL获得各分页的页面代码,从所述页面代码中抽取各分页的正文;
组合各分页的正文,得到完整的RSS信息。
其中,在所述得到完整的RSS信息之后还包括步骤:
将所述完整的RSS信息推送给用户。
本发明还提供一种服务器,其包括所述的RSS信息分页抓取系统。
本发明所述RSS信息分页抓取系统及方法,根据常用RSS频道建立分页频道列表,并得到对应每个RSS频道的分页标签,进而在从RSS源抓取的信息对应的页面代码中查找相应的分页标签,根据分页标签获得各分页的内容,从而得到完整的RSS信息,保证了推送给用户的RSS信息的完整性,提高了用户的阅读效率。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
图1是本发明实施例一所述RSS信息分页抓取系统的模块结构示意图,如图1所示,所述系统包括:
列表建立单元100,适于收集具有分页的RSS频道,建立分页频道列表。
RSS频道一般是指各网站按照内容类型划分得到的诸如新闻频道、娱乐频道、生活休闲频道、读书频道、下载频道、体育频道、游戏频道、音乐频道、视频频道、汽车频道、房产频道等版块。随网站的不同,这些频道的名称可能不同,并且各个频道之间的层次关系也可能不同,比如在某些网站中游戏频道可能作为娱乐频道的子频道出现。方便起见,将上述包含子频道的频道称为父频道,由于同一个网站中,每个父频道下的网页采用相同的分页形式,本申请中的RSS频道可以对应到父频道这一层,而无需向下对应到子频道。
所述分页频道列表中包括所有常见的具有分页的RSS频道,比如新浪汽车频道、网易数码频道、搜狐军事频道等等。
列表分析单元200,适于分析所述分页频道列表,得到对应每个RSS频道的分页标签。
每个RSS频道均会对应一种分页标签,比如,图2a是新浪汽车频道的分页标签所对应的页面展示效果图,表1a是该分页标签对应的源代码,该分页标签可以概括为class属性为pb的div标签;图2b是网易数码频道的分页标签所对应的页面展示效果图,表1b是该分页标签对应的源代码,该分页标签可以概括为class属性为endPageNum的div标签。一般情况下,一个RSS频道中的所有网页信息如果存在分页均会采用相同的分页标签,根据这一情况,可以建立RSS频道与分页标签的对应关系表。
表1a新浪汽车频道分页标签
表1b网易数码频道分页标签
图3是所述列表分析单元的模块结构示意图,如图3所示,所述列表分析单元200进一步包括:
网页提取模块210,适于依次取出所述分页频道列表中的每个RSS频道,找到所述RSS频道中具有分页的网页。
标签对应模块220,适于分析所述具有分页的网页的页面代码,找到其中的分页标签作为相应RSS频道所对应的分页标签。
代码获取单元300,适于当从RSS源抓取信息时,如果作为当前信息来源的目标RSS频道属于所述分页频道列表,则获取所述当前信息对应的页面代码。
图4是所述代码获取单元的模块结构示意图,如图4所示,所述代码获取单元300进一步包括:
信息抓取模块310,适于从RSS源抓取信息。这里的RSS源包括所述分页频道列表中的RSS频道,以及其他的RSS频道。
判断模块320,适于判断作为当前信息来源的目标RSS频道是否属于所述分页频道列表。
代码获取模块330,适于当作为当前信息来源的目标RSS频道属于所述分页频道列表时,获取所述当前信息对应的页面代码。
标签查找单元400,适于在所述页面代码中查找所述目标RSS频道对应的分页标签。
根据所述RSS频道与分页标签的对应关系表,可以查找到目标RSS频道对应的分页标签,简记为目标标签;这时,目标标签已知,进而可以在当前信息对应的页面代码中查找所述目标标签,比如当目标标签是class属性为endPageNum的div标签时,可以以“<divclass="endPageNum">”作为关键字在当前信息对应的页面代码进行查找,确定目标标签在当前信息对应的页面代码中的位置。
分页组合单元500,适于根据查找到的分页标签获得各分页对应的页面,组合各分页对应的页面,得到完整的RSS信息。
图5是所述分页组合单元的模块结构示意图,如图5所示,所述分页组合单元500进一步包括:
URL(Uniform/UniversalResourceLocator,统一资源定位符)获取模块510,适于根据查找到的分页标签得到各分页的URL。
首先,以表1a所示分页标签为例进行说明,找到该分页标签后,通过提取该div标签下所有a标签的href属性可以得到各分页的URL如下:'http://auto.sina.com.cn/news/2005-12-26/1450160051.shtml';
'http://auto.sina.com.cn/news/2005-12-26/1450160051.shtml';
'http://auto.sina.com.cn/news/2005-12-26/1450160053.shtml';
'http://auto.sina.com.cn/news/2005-12-26/1450160053.shtml'。
其中,前两个URL相同,均是对应第1页;后两个URL相同,均是对应第3页。通过删除重复的URL可以得到第1页和第3页的URL,同时当前页(第2页)的URL是已知的,至此得到所有分页的URL。
再以表1b所示分页标签为例说明,找到该分页标签后,通过提取该div标签下所有a标签的href属性可以得到各分页的URL如下:
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_2.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_3.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_4.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_5.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_6.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_7.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_2.html";
"http://tech.163.com/digi/12/0802/06/87SPF4HA00163HEB_all.html#p1"。
其中,第2页对应的URL出现了两次,通过删冗操作可以删除多余的URL。另外,最后一个URL是对应全文的URL,根据该URL可以得到全文的内容。但是,由于很多RSS频道的网页并不设置这种URL,所以本申请仍然采用整合各分页URL的方式获得全文的内容。而对于这种全文的URL,本申请中需要从根据分页标签获得的所有URL中删除这种对应全文的URL,以保证最终获得的是各个分页的URL。具有应用中,可以通过解析分页标签对应的代码,根据关键词(比如“全文”)删除该种URL。
正文获取模块520,适于根据各分页的URL获得各分页的页面代码,从所述页面代码中抽取各分页的正文。
分页组合模块530,适于组合各分页的正文,得到完整的RSS信息。
图6是本发明实施例二所述RSS信息分页抓取系统的模块结构示意图,如图6所示,本实施例所述系统与实施例一所述系统基本相同,其不同之处仅在于,本实施例所述系统还包括:
推送单元600,适于将所述完整的RSS信息推送给用户。
一般情况下,所述推送单元600通过邮件方式将所述完整的RSS信息发送到目标用户的邮箱中,用户接收邮件时可以查看到完整RSS信息,无需再到相应的出处网站查看原文,提高了阅读效率。
本发明实施例一、实施例二所述RSS信息分页抓取系统目前可以设置于服务器端,随着硬件性能的提升,也可以在客户端实施。
图7是本发明实施例三所述RSS信息分页抓取方法流程图,如图7所示,所述方法包括步骤:
S100:收集具有分页的RSS频道,建立分页频道列表。
其中,所述步骤S100体包括:
依次取出所述分页频道列表中的每个RSS频道,找到所述RSS频道中具有分页的网页。
分析所述具有分页的网页的页面代码,找到其中的分页标签作为相应RSS频道所对应的分页标签。
S200:分析所述分页频道列表,得到对应每个RSS频道的分页标签。
S300:当从RSS源抓取信息时,如果作为当前信息来源的目标RSS频道属于所述分页频道列表,则获取所述当前信息对应的页面代码。
其中,所述步骤S300具体包括:
从RSS源抓取信息,判断作为当前信息来源的目标RSS频道是否属于所述分页频道列表,如果是,获取所述当前信息对应的页面代码;否则,认为所述当前信息对应的网页不存在分页,结束流程。
S400:在所述页面代码中查找所述目标RSS频道对应的分页标签。
S500:根据查找到的分页标签获得各分页对应的页面,组合各分页对应的页面,得到完整的RSS信息。
其中,所述步骤S500具体包括:
根据查找到的分页标签得到各分页的URL;
根据各分页的URL获得各分页的页面代码,从所述页面代码中抽取各分页的正文;
组合各分页的正文,得到完整的RSS信息。
另外,在所述步骤S500之后还可以包括步骤S600:将所述完整的RSS信息推送给用户。
本发明实施例所述RSS信息分页抓取系统及方法,根据常用RSS频道建立分页频道列表,并得到对应每个RSS频道的分页标签,进而在从RSS源抓取的信息对应的页面代码中查找相应的分页标签,根据分页标签获得各分页的内容,从而得到完整的RSS信息,保证了推送给用户的RSS信息的完整性,提高了用户的阅读效率。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。