一种网页信息获取系统及方法
技术领域
本发明涉及网络视频信息获取领域,尤其是涉及一种网页信息获取系统及方法。
背景技术
目前网页信息的获取技术主要集中在全网网页信息的获取和垂直网页信息的获取。
普通的网页搜索引擎,如谷歌公司的谷歌搜索(www.google.com)和百度公司的百度搜索(www.baidu.com),这类网页搜索,它的信息主要是从每个下载页面中按照一定的条件抽取文字等重要信息,但是这种抽取可以允许不太准确的信息(比如:在一个视频播放页中,它不会太重视导演是谁,视频的时长是多久。再如:电视节目预告页面中,它可以不重视一个节目是7:00开始还是7:30开始),垂直类获取就必须要求准确的信息。所以通用的全网网页信息获取信息的准确性无法达到要求。
目前的网页获取系统,主要是在解决如何获取到系统需要获取的网页,而对本身页面中的信息的准确性无法达到视频垂直领域的要求;视频垂直领域对信息的更新频率要求,普通的网页获取页无法准确的控制其更新的频率。
垂直网页信息的获取目前没有看到一套结构清楚,各项功能独立,容易控制重复下载和更新频率通用的系统及其方法。
发明内容
为解决上述问题,本发明提供了一种网页信息获取系统及方法,其中该系统包括:任务投递器,用于将种子URL或任务解析器解析出的子URL封装成下载任务,将任务投递到任务队列,并记录投递成功与否的日志;任务队列,用于存取任务,接收任务投递器投递的任务,还用于等待任务执行器获取任务,当任务执行器发送请求获取任务时,任务队列将任务返回给任务执行器;包括任务解析器的任务执行器,用于执行任务队列中的任务,其从任务队列获取下载任务;通过任务类型获取到对应的任务解析器,下载网页源代码,调用任务解析器对网页源代码进行解析,并返回解析到的数据,该数据包括一个URL集合和一个视频信息集合;以及存储设备,用于保存解析器解析到的数据。
进一步,任务投递器将由任务执行器解析出的子URL封装为一个任务投递到任务队列。
进一步,所述URL集合包括0到n个URL信息以及每个URL的相关信息,其中包括了子URL信息以及相关信息,该视频信息集合包括0到n个视频信息数据,所述相关信息包括标题、图片、高清标识以及是否是优先任务,所述视频信息包括播放次数、主演、评论、时长、视频简介。
进一步,任务投递器、任务执行器与任务队列之间,都是通过http协议进行交互,而任务执行器通过数据库规定的协议或写文件的方式与存储设备进行交互。
进一步,所述系统的任务投递器用于将URL、与URL对应的相关信息封装成一个json格式的字符串投递到任务队列中。
进一步,所述任务类型指的是任务中的URL的具体类型,具体类型包括播放页、列表页、搜索结果页或者是未指定特殊类型的页面,相对应的解析器为播放页的解析器、列表页的解析器、搜索结果页的解析器、以及通用的解析器进行解析。
进一步,在每一个任务投递到任务队列时,进入之前首先要检查这个任务中的URL,是否已投递过,没有投递过的话,进入队列,并记录这个URL的投递时间;如果投递过,那么检查上次投递的时间与当前时间的间隔,这个时间间隔就是最快时间频率,如果小于最快时间频率,就不会投递到队列,并返回信息给任务投递器,如果大于最快的时间频率,则放入队列,并记录这个URL的投递时间。
本发明提供了一种网页信息获取方法,该方法包括以下步骤:步骤(1)将一个种子URL封装成一个下载任务;步骤(2)通过约定的协议将任务投递到任务队列;步骤(3)任务队列接收任务;步骤(4)任务执行器通过约定的协议从任务队列获取任务,并根据根据任务类型获取对应的任务解析器;步骤(5)对URL网页进行源码下载并使用获取到的任务解析器进行解析;步骤(6)将解析出的视频信息集合和URL集合保存在存储设备上;步骤(7)任务投递器将由任务执行器解析出的子URL封装为一个任务投递到任务队列;步骤(8)循环判断任务队列中是否有任务,如果有转到步骤(3),否则结束。
进一步,所述URL集合包括0到n个URL信息以及每个URL的相关信息,其中包括了子URL信息以及相关信息,该视频信息集合包括0到n个视频信息数据,所述相关信息包括标题、图片、高清标识以及是否是优先任务,所述视频信息包括播放次数、主演、评论、时长、视频简介。
进一步,任务投递器、任务执行器与任务队列之间,都是通过http协议进行交互,而任务执行器通过数据库规定的协议或写文件的方式与存储设备进行交互。
进一步,所述任务投递器用于将URL、与URL对应的相关信息封装成一个json格式的字符串投递到任务队列中。
进一步,步骤(4)中所述任务类型指的是任务中的URL的具体类型,具体类型包括播放页、列表页、搜索结果页或者是未指定特殊类型的页面,相对应的解析器为播放页的解析器、列表页的解析器、搜索结果页的解析器、以及通用的解析器进行解析。
进一步,在每一个任务投递到任务队列时,进入之前首先要检查这个任务中的URL,是否已投递过,没有投递过的话,进入队列,并记录这个URL的投递时间;如果投递过,那么检查上次投递的时间与当前时间的间隔,这个时间间隔就是最快时间频率,如果小于最快时间频率,就不会投递到队列,并返回信息给任务投递器,如果大于最快的时间频率,则放入队列,并记录这个URL的投递时间。
本发明的有益效果是:各功能模块独立,功能划分非常明确,每个模块可不限于任何形式和语言实现的限制;统一集中的任务队列,每一个任务的投递下载时间点,被取走下载的时间点,进入队列的次数都在同一模块中处理,简化了是否需要重复下载,下载频率的控制;单独的任务解析器,不同的网页解析,只需要开发对应的解析器,每个解析器能专注于获取准确的信息。(由于垂直领域的网页信息获取,一般是需要获取信息非常准确,这有别于通用网页获取信息技术。还有一方面是维护成本的价值,由于视频类垂直网页结构更新非常快,单独的解析器也有利于维护人员快速专注的维护不同的解析器);非常有利于扩展系统处理能力,而不需要对系统架构做任何的修改;添加新的网站页面获取非常容易,只需要添加一个对应的解析器,就可快速的获取到新网页的页面信息。
附图说明
图1是依据本发明的网页信息获取系统的框图;
图2是依据本发明的网页信息获取方法的流程图;
图3是依据本发明的任务执行器内部执行任务的流程图;
图4是根据本发明的具体实施例的准备工作、种子URL任务投递、数据交换过程的流程图;
图5是根据本发明的具体实施例的对新网站进行网页信息获取的流程图。
具体实施方式
下面结合附图对本发明进一步说明。
如图1所示,本发明的信息获取系统包括:
任务投递器,用于将种子URL或任务解析器解析出的子URL封装成下载任务,将任务投递到任务队列,并记录投递成功与否的日志;
任务队列,用于存取任务,接收任务投递器投递的任务,还用于等待任务执行器获取任务,当任务执行器发送请求获取任务时,任务队列将任务返回给任务执行器;
包括多个任务解析器的任务执行器,用于执行任务队列中的任务,其从任务队列获取下载任务;通过任务类型获取到对应的任务解析器,下载网页源代码,调用任务解析器对网页源代码进行解析,并返回解析到的详细数据,该详细数据包括一个URL集合和一个视频信息集合,该URL集合包括0到n个URL信息以及每个URL的相关信息,该视频信息集合包括0到n个视频信息数据;
以及存储设备,用于保存解析器解析到的详细数据;
任务投递器、任务队列、任务执行器以及存储设备之间没有任何的耦合关系,任务投递器、任务执行器与任务队列之间,都是通过http协议进行交互,而任务执行器通过数据库规定的协议或写文件的方式与存储设备进行交互。
所述系统的任务投递器用于将URL、与URL对应的相关信息封装成一个json格式的字符串,与URL对应的相关信息包括标题、图片、高清标识以及是否是优先任务。
任务类型指的是任务中的URL的具体类型,具体类型包括播放页、列表页、搜索结果页或者是未指定特殊类型的页面(默认类型)。这些不同的类型,也需要在任务中区分开来,可以用特定的参数来标示任务中的URL是什么类型的页面,相对应的解析器为播放页的解析器、列表页的解析器、搜索结果页的解析器、以及通用的解析器进行解析。
所述任务队列在接收任务时,会做如下几步检查:
任务合法性检查:检查任务数据是否是合法的json格式数据,并是否包含合法的URL及其他参数,且检查任务是否已达到任务的最大投递限制以及是否下载与频率检查:若已正确下载的任务再投递到任务队列,则返回已下载信息;若任务未下载,便保存任务到任务队列,并返回投递成功信息,相同的任务,只有达到或超过预定的时间间隔才可重复投递。
所述系统和方法中的任务级别可分为种子任务和子任务,种子任务是系统最基本的任务,在整个系统启动前,会准备好一些种子URL,使用任务投递器,将这些种子URL封装成种子任务,任务执行器通过任务解析器解析到的所有子URL都会封装成子任务,除种子任务之外的所有任务都属于子任务。
如图2所示,本发明的网页信息获取方法,包括以下步骤:
a.将一个种子URL封装成一个下载任务;
b.通过约定的协议将任务投递到任务队列;
c.任务队列接收任务;
d.通过约定的协议从任务队列获取任务;
e.根据任务类型获取对应的任务解析器;
f.对URL网页进行下载并使用获取到的任务解析器进行解析;以及
g.保存解析出的视频信息和URL;
h.若还有URL需要封装,转到a步骤,否则步骤结束。
如图3所示,本发明的任务执行器执行时的内部流程包括:
1.从任务队列获取任务。获取到任务继续,未获取到任务,循环继续获取任务。
2.根据任务URL,获取对应的解析器。获取到继续,未获取到,写日志,并循环继续获取下一任务。
3.下载获取页面源代码。获取到继续,未获取到,写日志,并循环继续获取下一任务。
4.解析页面中的视频信息和所有URL(包括子URL)及URL的标题、图片、高清标识、是否是优先任务等相关信息。
5.如果视频信息个数大于等于1,保存视频信息;否则进入下一步。
6.如果URL个数大于等于1,封装子URL及相关信息为任务;投递到任务队列并保存URL及相关信息。
7.保存网页源代码。
8.写执行这个任务的整体日志。
9.本次循环结束。进入下一循环继续获取任务。
下面结合两个具体的实施例来说明如何下载视频信息以及如何添加视频信息获取。
实施例一、
如果我们要下载http://www.youku.com/页面中所有视频的信息。具体的实现方案如下:
一、如图4所示,准备工作如下:
1、启动存储服务,保证可正常存取数据。
2、启动任务队列服务,保证可正常的存取任务。
3、实现通用的URL解析器,负责可以将任何页面中出现的URL解析出来,如果相同的URL有图片等相关信息,也负责解析出来。使用现有的网页解析技术,解析出任何页面中的所有链接、标题、图片、时长、是否高清等信息。该步的解析,是对任何出现了视频链接页面的通用解析,比如:http://tv.youku.com/这个页面本身是没有视频的播放框的,但是它有很多指向视频的图片和视频标题。使用该步的解析,就能获取到包含多个子URL及每个子URL相关信息的一个集合,该相关信息例如包括标题、图片、时长,高清标识、以及是否优先任务信息。
4、实现专用的任务解析器,可针对视频播放页面进行具体解析,该播放页面例如具有播放次数、主演、评论、时长、视频简介等视频信息。实例中优酷网的播放页都是相同的页面结构,所以为播放页实现一个任务解析器,就能解析所有相同类型的播放页面,如要下载解析http://v.youku.com/v_show/idXMzU2NjgyOTI4.html的信息。我们需要在任务执行器中下载完网页数据后,解析获取页面中的播放数、主演、时长、评论、视频简介等信息(统称为视频信息)。使用该步的解析,除了获得包含URL和URL相关信息的集合外,还获得一个视频信息集合(1到n个视频)。
5、将任务解析器配置到任务执行器中。任务解析器使用程序实现完成后,只需要把解析器代码,放在执行器程序指定的位置,然后再配置这个解析器可以解析URL的规则(这里常是个正则表达式,表示这个解析器可以解析一类URL的页面内容),任务执行器程序启动时,自动将所有解析器加载到任务执行器中,并加载解析器和URL的对应关系,供执行任务时通过URL查找解析器时使用。
6、启动任务执行器。
二、如图4所示,具体的数据交互过程如下:
7、任务投递器将http://www.youku.com/(种子URL)封装成下载任务,投递到任务队列。
8、任务执行器从任务队列获取到http://www.youku.com/这个任务,获取到对应的解析器。任务执行器会根据URL去查找,配置解析器时配置的URL和解析器的对应关系。举个实际例子:不同的任务解析器,能对不同类的网页进行解析,只需要配置与一类URL对应的解析器,则每个解析器能专注于获取这一类URL的准确的信息。
9、下载html源码,解析到所有的视频信息(例如这个http://www.youku.com/页面没有视频信息,视频信息个数为0)和所有的链接的子URL及子URL的标题、图片、高清标识等相关信息。
10、保存子URL及相关信息。此时视频信息个数为0,不需要保持视频信息。
11、内部调用任务投递器,将保存的子URL及相关信息封装为一个任务、投递该任务到任务队列。
12、任务执行器从任务队列循环获取任务,例如:获取到http://v.youku.com/v_show/idXMzU2NjgyOTI4.html这个任务,获取到对应的解析器,下载html源码,解析到页面的所有链接的URL信息(包括子URL)及URL的标题、图片、高清标识等其他相关信息和这个视频的视频信息(这个页面是播放页,视频信息个数为1)。
13、保存1个视频信息和URL(包括子URL)信息及相关信息。
14、内部调用任务投递器将从这个页面中解析到的链接的子URL及相关信息封装成一个任务,投递到任务队列中。这里有的链接和http://www.youku.com/页面中解析后有的链接是重复的,如果这次投递时间和上次投递时间小于预定的时间间隔,这里称为最快时间频率,将无法投递成功,这就保证了整个系统页面下载解析的频率控制。在每一个任务投递到任务队列时,进入之前首先要检查这个任务中的URL,是否已投递过,没有投递过的话,进入队列,并记录这个URL的投递时间;如果投递过,那么检查上次投递的时间与当前时间的间隔,这个时间间隔就是最快时间频率,假设这个默认的是5分钟,那么间隔小于5分钟的,就不会投递到队列,并返回信息给任务投递器,满足最快的时间频率,则放入队列,并记录这个URL的投递时间。
为了实现本发明系统和方法的可扩展性,在新网站中实现网页信息获取,如图5所示,可通过如下方式来实现:
在任务执行器中配置新网络解析器;
重启任务执行器,等待获取任务;
使用任务投递器,将新网站的种子URL封装成任务,投递到任务队列中。
任务执行器循环获取到任务,就按照图4的流程执行。
此处已经根据特定的示例性实施例对本发明进行了描述。对本领域的技术人员来说在不脱离本发明的范围下进行适当的替换或修改将是显而易见的。示例性的实施例仅仅是例证性的,而不是对本发明的范围的限制,本发明的范围由所附的权利要求定义。