用于下载网站数据的分布式方法和系统的制作方法
【专利摘要】本发明提供了用于下载网站数据的分布式方法和系统。该系统包括:控制器,读取起始地址列表中的一个或多个地址,并将所述一个或多个地址存入在数据库中维护的多个下载队列中的至少一个下载队列;数据库,用于维护多个下载队列,其中,所述多个下载队列至少包括第一下载队列和第二下载队列,且各个下载队列对应于不同类型的数据;多个下载模块,用于根据所述多个下载队列来分别下载多个类型的数据,从根据所述第一下载队列下载的数据中解析出要下载的后续地址,判断所述后续地址属于哪个下载队列,根据所述判断的结果,将所述后续地址存入相应下载队列中;以及重复上述过程,直到满足预定条件为止。
【专利说明】用于下载网站数据的分布式方法和系统
【技术领域】
[0001]本发明总体上涉及分布式数据下载,更具体地涉及用于下载网站数据的分布式方法和系统。
【背景技术】
[0002]在当今的搜索引擎领域中,为了更快速有效地对互联网上的网页进行搜索,通常需要由搜索引擎提供商来预先从各个网站上抓取/爬取/下载(在下文中,这些术语可作为同义词互换使用)各种网页/应用程序/音频/视频等并进行分析。为了实现该网页抓取,不可避免地要用到各种网页抓取程序(也被称为网络爬虫、网络蜘蛛等,下文中统称为网络爬虫)。
[0003]现有的网络爬虫一般由一些起始地址开始下载网页,然后通过解析所下载的页面内容来决定后续爬取的页面。通常需要在爬虫程序内实现一个爬取队列,用于存放起始地址与解析出来的后续爬取地址。此外,还需要实现一个用于存放下载过的页面地址的去重过滤器,以避免重复爬取。
[0004]与单机的爬虫程序相比,可同时部署在多个节点上的分布式网络爬虫在计算机硬件资源和/或网络带宽资源的使用以及与ip、地域有关问题的处理上能够更加灵活。现有的分布式网络爬虫通常通过共享爬取队列和去重过滤器来实现。
[0005]然而,现有的爬虫系统至少存在以下问题:(1)不支持使用不同的下载配置来下载不同类型的数据;(2)其去重过滤器不支持有效期,即,其不支持对一些会更新的网页进行重复爬取;(3)不支持对爬取规则的设定以及对JavaScript (下文中简称为JS)的分析。
[0006]此外,现有的分布式爬虫系统还至少存在以下问题:(I)难以统一部署和配置,由于分布式爬虫系统通常部署在多台计算机上,因此对各个爬虫节点(模块)进行集中管理和统一配置非常困难。特别地,在需要对多个网站进行爬取的时候,常常需要在开始、停止爬取网站时登录爬虫服务器,进行修改配置、启动/停止相关进程等操作。当网站数量较大时,这些过程变得非常繁琐且容易出错;(2)难以设置针对特定网站的整体爬取间隔,通常需要控制网络爬虫对网站的访问间隔,以避免影响网站正常运转,减少对网站造成太大的负担,然而现有技术仅能在单个爬虫程序上对爬取间隔进行限制,无法将所有分布式爬虫节点作为一个整体来进行控制,换言之,尽管可以限制单个爬虫对同一网站的各自的访问频率,但是难以避免出现很多爬虫同时或几乎同时访问该同一网站的情况,在该情况下,网站的正常运转受到了突发访问高峰的干扰,严重时有可能使网站宕机或下线;以及(3)难以收集统计信息,无法直接获得分布式爬虫的总体统计信息,通常需要另外搭建一套日志系统来实现此功能。
【发明内容】
[0007]因此,本发明提供了至少解决上述技术问题的用于下载网站数据的分布式方法和系统。[0008]具体地,根据本发明的第一方案,提供了一种用于下载网站数据的分布式方法。该方法包括以下步骤:a)读取起始地址列表中的一个或多个地址,并将所述一个或多个地址存入在数据库中维护的多个下载队列中的至少一个下载队列,其中,所述多个下载队列至少包括第一下载队列和第二下载队列,且各个下载队列对应于不同类型的数据;b)根据所述多个下载队列来分别下载多个类型的数据;c)从根据所述第一下载队列下载的数据中解析出要下载的后续地址;d)判断所述后续地址属于哪个下载队列;e)根据步骤d)中的判断结果,将所述后续地址存入相应下载队列中;以及f)重复上述步骤b)至e),直到满足预定条件为止。
[0009]在一些实施例中,步骤b)包括:按照在所述数据库中集中维护的针对各个网站的下载间隔,根据相应下载队列中的记录,从相应网站下载数据。
[0010]在一些实施例中,所述第一下载队列是网页下载队列,以及所述第二下载队列是应用下载队列。
[0011]在一些实施例中,针对每个要下载的网站,预定义由多个下载模块统一使用的、并针对所述网站的不同页面类型单独规定的一条或多条爬取规则。
[0012]在一些实施例中,步骤d)包括:当所述爬取规则包括指示所述后续地址的类型的第一属性时,根据所述第一属性来判断所述后续地址属于哪个下载队列。
[0013]在一些实施例中,步骤d)还包括:当所述爬取规则不包括指示所述后续地址的类型的第一属性时,判断所述后续地址属于第二下载队列。
[0014]在一些实施例中,步骤e)包括:进一步判断所述后续地址是否满足由所述爬取规则中的第二属性所定义的正则表达式,如果满足所述正则表达式,则将作为所述后续地址与所述正则表达式匹配的结果的各字符串拼接为要存入相应下载队列中的地址,否则跳过所述后续地址。
[0015]在一些实施例中,步骤c)包括:根据所述爬取规则中用于描述后续地址的字符串构成特征的第三属性,从下载的数据中解析出要下载的后续地址。
[0016]在一些实施例中,所述第三属性是xpath表达式。
[0017]在一些实施例中,步骤b)包括:从第一下载队列中读取一条记录;使用在所述数据库中维护的第一去重列表,对所述记录进行去重;以及根据所述记录来下载相应数据。
[0018]在一些实施例中,对所述记录进行去重的步骤包括:当确定所述记录与所述第一去重列表中的记录匹配时,跳过所述记录并从所述第一下载队列中读取下一条记录。
[0019]在一些实施例中,在步骤e)之前,所述方法还包括以下步骤:使用所述记录中的地址来更新所述第一去重列表;以及步骤e)包括:在所述后续地址属于所述第一下载队列的情况下,使用更新后的所述第一去重列表对所述后续地址去重,并将其存入所述第一下载队列;以及在所述后续地址属于所述第二下载队列的情况下,使用在所述数据库中维护的第二去重列表对所述后续地址去重,相应更新所述第二去重列表,并将其存入所述第二下载队列。
[0020]在一些实施例中,步骤b)包括:按优先级从所述第二下载队列中读取待下载地址;使用在所述数据库中维护的第三去重列表对所述待下载地址进行去重;对由所述待下载地址指向的数据进行下载;以及更新所述第三去重列表。
[0021]在一些实施例中,步骤b)还包括:对已下载的数据进行检查;计算已下载的数据的数字摘要;基于所述数字摘要,使用在所述数据库中维护的第四去重列表对已下载的数据进行去重;更新所述第四去重列表;以及将所述已下载的数据存入文件系统中。
[0022]在一些实施例中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每条记录均包括有效期,当使用各个去重列表对相应地址进行去重并且在去重列表中存在与相应地址匹配的记录时,所述方法包括以下步骤:判断所述记录的有效期是否已到期,如果已到期,则不对相应地址进行去重,如果未到期,则对相应地址进行去重。
[0023]在一些实施例中,所述爬取规则还包括第四属性,当所述第四属性的值为“真”时,通过记录对包括所述第四属性在内的所述爬取规则的使用的次数,来识别当前下载的链接在相应网站的应用列表的第几页上。
[0024]在一些实施例中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表时,在当前下载的链接在应用列表的预定页数的页面上的情况下,与当前下载的链接在应用列表的预定页数之后的页面上的情况下相比,将去重列表中对应记录的有效期设置为更大。
[0025]在一些实施例中,所述预定页数小于等于5页。
[0026]在一些实施例中,由所述数据库来提供与网站数据下载相关的统计信息。
[0027]在一些实施例中,所述统计信息包括以下一项或多项:所述多个下载队列的当前长度、指定时间段内各个去重列表的长度、或各个去重列表的总长度。
[0028]在一些实施例中,所述数据库是key-value型数据库。
[0029]在一些实施例中,所述数据库是Redi s数据库。
[0030]在一些实施例中,所述预定条件是所有下载队列为空、达到预定爬取深度、或二者的组合。
[0031]根据本发明的第二方面,提供了一种用于下载网站数据的分布式系统。该系统包括:控制器,读取起始地址列表中的一个或多个地址,并将所述一个或多个地址存入在数据库中维护的多个下载队列中的至少一个下载队列;数据库,用于维护多个下载队列,其中,所述多个下载队列至少包括第一下载队列和第二下载队列,且各个下载队列对应于不同类型的数据;多个下载模块,用于根据所述多个下载队列来分别下载多个类型的数据,从根据所述第一下载队列下载的数据中解析出要下载的后续地址,判断所述后续地址属于哪个下载队列,根据所述判断的结果,将所述后续地址存入相应下载队列中;以及重复上述过程,直到满足预定条件为止。
[0032]在一些实施例中,所述多个下载模块被进一步配置为:按照在所述数据库中集中维护的针对各个网站的下载间隔,根据相应下载队列中的记录,从相应网站下载数据。
[0033]在一些实施例中,所述第一下载队列是网页下载队列,以及所述第二下载队列是应用下载队列。
[0034]在一些实施例中,针对每个要下载的网站,预定义由多个下载模块统一使用的、并针对所述网站的不同页面类型单独规定的一条或多条爬取规则。
[0035]在一些实施例中,所述下载模块被配置为:当所述爬取规则包括指示所述后续地址的类型的第一属性时,根据所述第一属性来判断所述后续地址属于哪个下载队列。
[0036]在一些实施例中,所述下载模块还被配置为:当所述爬取规则不包括指示所述后续地址的类型的第一属性时,判断所述后续地址属于第二下载队列。[0037]在一些实施例中,所述下载模块被配置为:进一步判断所述后续地址是否满足由所述爬取规则中的第二属性所定义的正则表达式,如果满足所述正则表达式,则将作为所述后续地址与所述正则表达式匹配的结果的各字符串拼接为要存入相应下载队列中的地址,否则跳过所述后续地址。
[0038]在一些实施例中,所述下载模块被配置为:根据所述爬取规则中用于描述后续地址的字符串构成特征的第三属性,从下载的数据中解析出要下载的后续地址。
[0039]在一些实施例中,所述第三属性是xpath表达式。
[0040]在一些实施例中,所述下载模块被配置为:从第一下载队列中读取一条记录;使用在所述数据库中维护的第一去重列表,对所述记录进行去重;以及根据所述记录来下载相应数据。
[0041]在一些实施例中,所述下载模块还被配置为:当确定所述记录与所述第一去重列表中的记录匹配时,跳过所述记录并从所述第一下载队列中读取下一条记录。
[0042]在一些实施例中,所述下载模块被配置为:使用所述记录中的地址来更新所述第一去重列表;在所述后续地址属于所述第一下载队列的情况下,使用更新后的所述第一去重列表对所述后续地址去重,并将其存入所述第一下载队列;以及在所述后续地址属于所述第二下载队列的情况下,使用在所述数据库中维护的第二去重列表对所述后续地址去重,相应更新所述第二去重列表,并将其存入所述第二下载队列。
[0043]在一些实施例中,所述下载模块还被配置为:按优先级从所述第二下载队列中读取待下载地址;使用在所述数据库中维护的第三去重列表对所述待下载地址进行去重;对由所述待下载地址指向的数据进行下载;以及更新所述第三去重列表。
[0044]在一些实施例中,所述下载模块还被配置为:对已下载的数据进行检查;计算已下载的数据的数字摘要;基于所述数字摘要,使用在所述数据库中维护的第四去重列表对已下载的数据进行去重;更新所述第四去重列表;以及将所述已下载的数据存入文件系统中。
[0045]在一些实施例中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每条记录均包括有效期,当使用各个去重列表对相应地址进行去重并且在去重列表中存在与相应地址匹配的记录时,所述下载模块还被配置为:
[0046]判断所述记录的有效期是否已到期,如果已到期,则不对相应地址进行去重,如果未到期,则对相应地址进行去重。
[0047]在一些实施例中,所述爬取规则还包括第四属性,当所述第四属性的值为“真”时,通过记录对包括所述第四属性在内的所述爬取规则的使用的次数,来识别当前下载的链接在相应网站的应用列表的第几页上。
[0048]在一些实施例中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表时,在当前下载的链接在应用列表的预定页数的页面上的情况下,与当前下载的链接在应用列表的预定页数之后的页面上的情况下相比,所述下载模块将去重列表中对应记录的有效期设置为更大。
[0049]在一些实施例中,所述预定页数小于等于5页。
[0050]在一些实施例中,由所述数据库来提供与网站数据下载相关的统计信息。
[0051]在一些实施例中,所述统计信息包括以下一项或多项:所述多个下载队列的当前长度、指定时间段内各个去重列表的长度、或各个去重列表的总长度。
[0052]在一些实施例中,所述数据库是key-value型数据库。
[0053]在一些实施例中,所述数据库是Redis数据库。
[0054]在一些实施例中,所述预定条件是所有下载队列为空、达到预定爬取深度、或二者的组合。
[0055]通过使用本发明提供的方法和系统,可以按照要获取的数据的类型,例如(但不限于):网页文件(例如,111:1111、1111:1111、8111:1111等等)、应用程序(例如,在Windows上运行的exe文件、针对Android系统的apk应用程序包等)、文档文件(例如,WORD文件、PDF文件等)、动态图像文件(例如,AVI文件、MP4文件等等)、静态图像文件(例如,JPG文件、BMP文件等等)、音频文件(MP3、WMA等等)、以及其他各种数据类型(例如,Flash等等),由爬虫(下载器)采用不同的下载和处理流程来进行处理。充分利用了这些不同类型数据在处理器/存储器资源和/或网络资源等方面上的不同特性。
[0056]此外,通过使用本发明提供的方法和系统,可以提供针对去重列表中任意记录的有效期,使得对一些可能会更新的网页的重复爬取成为可能。
[0057]此外,通过使用本发明提供的方法和系统,可以通过使用xpath表达式和正则表达式,在很大程度上处理了网页文件中以JS格式表达的网络地址的问题。
[0058]此外,通过使用本发明提供的方法和系统,支持由多个爬虫模块统一使用的、并针对不同页面类型单独提供的爬取规则,使得在简化了对多个爬虫模块的爬取规则的维护的同时,让爬取规则支持更为复杂的设置,以更方便地针对各个网站来设计爬取规则。特别地,通过让爬取规则支持翻页规则,使得用户可以针对不同页数来采取不同的爬取策略和更新去重列表的策略。
[0059]此外,通过使用本发明提供的方法和系统,借助专门的控制器和数据库来操作爬虫模块,包括:启动/停止/查看状态/修改配置等等,而无需在部署各个爬虫模块的节点上分别进行操作。
[0060]此外,通过使用本发明提供的方法和系统,借助数据库中统一维护的针对各个爬取/下载组维护的列表,可以对所有爬虫(下载器)的针对某一个网站的爬取间隔进行限制。此外,借助数据库中统一维护的爬取队列,支持多个分布式爬虫采用相同的爬取队列。
[0061]此外,通过使用本发明提供的方法和系统,借助针对数据库中维护的各个列表/队列的统计功能,可以获取相关统计信息,包括(但不限于):当前爬取队列/下载队列大小、以及总体/特定时间段内的爬取页面数/解析下载链接数/下载数/新文件数等。
[0062]换言之,通过使用本发明提供的方法和系统,可以解决或至少减轻现有技术所具有的前述技术问题。
【专利附图】
【附图说明】
[0063]通过下面结合【专利附图】
【附图说明】本发明的优选实施例,将使本发明的上述及其它目的、特征和优点更加清楚,其中:
[0064]图1示出了根据本发明的实施例的用于下载网站数据的示例分布式系统的简化框图;
[0065]图2示出了在图1所示的数据库中维护的一些示例数据结构的示意图;[0066]图3?9示出了根据本发明的实施例的用于设计示例爬取规则的示例过程的屏幕截图;
[0067]图10示出了根据本发明的实施例的用于下载网站数据的分布式方法的示例的爬取部分的流程图;以及
[0068]图11示出了根据本发明的实施例的用于下载网站数据的分布式方法的示例的下载部分的流程图。
[0069]在本发明的所有附图中,相同或相似的结构均以相同或相似的附图标记来标识。【具体实施方式】
[0070]下面参照附图对本发明的优选实施例进行详细说明,在描述过程中省略了对于本发明来说是不必要的细节和功能,以防止对本发明的理解造成混淆。以下,将结合特定的实施例来详细描述本发明的方法和系统。但是本领域技术人员应当理解:以下描述的各个特定实施例并不限制本发明的范围;相反地,应当将这些特定实施例理解为被包括在由所附权利要求限定的本发明的精神和范围中,且本领域技术人员可以在不脱离由所附权利要求限定的本发明的精神和范围的情况下,对本发明做出各种修改、添加、删除、或替换。
[0071]首先,参见图1,其示出了根据本发明的实施例的用于下载网站数据的示例分布式系统10的简化框图。分布式系统10包括:控制器110、数据库120、多个爬虫130_1?130_N (N代表爬虫的数目)、以及多个下载器140_1?140_M(M代表下载器的数目)。控制器110与数据库120相连,且数据库120与各个爬虫130_1?130_N和各个下载器140_1?140_M相连,形成以数据库120为中心的星型拓扑结构,进而控制器110可以通过数据库120来控制各个爬虫130_1?130_N和各个下载器140_1?140_M,且各个爬虫130_1?130_N和各个下载器140_1?140_11可以通过数据库120向控制器110反馈各种信息。当然,在另一些实施例中,控制器110可以与各个爬虫130_1?130_N和各个下载器140_1?140_M直接相连并通信。
[0072]在本实施例中,数据库120是key-value型数据库,更优选地,是Redis数据库。当然,数据库120也可以是其它key-value型数据库,例如(但不限于):Berkeley DB、MemCacheDB> BigTable> Dynamo> Tokyo Cabinet 等等。此外,数据库 120 也可以是其它非key-value 型数据库,例如(但不限于):MySQL> Microsoft SQL、Oracle RDBMS 等。
[0073]然而,与传统的关系型数据库相比,key-value型数据库能够提供更高的查询速度、更大的数据容量、更高的并发数、更适合通过主键进行查询,因此优选地使用key-value型数据库为本发明的各个模块提供队列/列表/配置/数据文件的存储和管理等等。此夕卜,由于Redis数据库提供了多种数据结构(包括字符串(string)、双向链表(list)、集合(set)、以及有序集合(zset)),因此其与其它key-value型数据库相比,更适于实现本发明的方法和系统。在下文中将描述通过这些数据结构,特别是有序集合(zset),来实现根据本发明的实施例的在数据库120中存储的各种数据结构。
[0074]为了方便对下文的理解,下面简要介绍一下zset的结构。zset是一个集合类的数据结构,其中每个元素均额外具有一个顺序属性(z值,又被称为score值)。可以在添加或修改元素的时候指定这一属性。每次指定后,zset会自动按新的z值来重新调整zset中各元素的顺序。可以跟据z值指定的顺序,以很高的效率对zset中的元素进行存取。更多细节可以参考 zset 的使用说明:http://redis.1o/commands#sorted_set。
[0075]现在,返回图1,将继续描述分布式系统10。在本实施例中,分布式系统10主要用于对指定网站的网页和在网页中提供的应用程序进行下载,并对下载到的网页进行分析,从中提取出可供后续下载的网页和/或应用程序的地址。在另一示例中,分布式系统10也可以用于对其他类型的数据进行下载,例如对网页和在网页中提供的视频进行下载、分析等。在另一示例中,分布式系统10也可以用于对一种或三种以上的数据(例如,网页、应用程序、音频等)进行下载、分析等。
[0076]在分布式系统10中,控制器110通过数据库120提供的数据库接口来处理在数据库120中维护的各个数据结构等,从而间接地控制各个爬虫130_1~130_N和各个下载器140_1 ~140_M。
[0077]在本实施例中,爬虫130_1~130_N和下载器140_1~140_M是基于开源爬虫框架scrapyl.6开发的,但本发明的实施例不限于此,也可以使用其它爬虫程序。
[0078]因此,在图1所示的分布式系统10中,各个模块的主要功能和使用方式如表1所
【权利要求】
1.一种用于下载网站数据的分布式方法,包括以下步骤: a)读取起始地址列表中的一个或多个地址,并将所述一个或多个地址存入在数据库中维护的多个下载队列中的至少一个下载队列,其中,所述多个下载队列至少包括第一下载队列和第二下载队列,且各个下载队列对应于不同类型的数据; b)根据所述多个下载队列来分别下载多个类型的数据; c)从根据所述第一下载队列下载的数据中解析出要下载的后续地址; d)判断所述后续地址属于哪个下载队列; e)根据步骤d)中的判断结果,将所述后续地址存入相应下载队列中;以及 f)重复上述步骤b)至e),直到满足预定条件为止。
2.根据权利要求1所述的方法,其中,步骤b)包括: 按照在所述数据库中集中维护的针对各个网站的下载间隔,根据相应下载队列中的记录,从相应网站下载数据。
3.根据权利要求1所述的方法,其中,所述第一下载队列是网页下载队列,以及所述第二下载队列是应用下载队列。
4.根据权利要求1所述的方法,其中,针对每个要下载的网站,预定义由多个下载模块统一使用的、并针对所述网站的不同页面类型单独规定的一条或多条爬取规则。
5.根据权利要求4所述的方法,其中,步骤d)包括: 当所述爬取规则包括指示所述后续地址的类型的第一属性时,根据所述第一属性来判断所述后续地址属于哪个下载队列。
6.根据权利要求5所述的方法,其中,步骤d)还包括: 当所述爬取规则不包括指示所述后续地址的类型的第一属性时,判断所述后续地址属于第二下载队列。
7.根据权利要求4所述的方法,其中,步骤e)包括: 进一步判断所述后续地址是否满足由所述爬取规则中的第二属性所定义的正则表达式,如果满足所述正则表达式,则将作为所述后续地址与所述正则表达式匹配的结果的各字符串拼接为要存入相应下载队列中的地址,否则跳过所述后续地址。
8.根据权利要求4所述的方法,其中,步骤c)包括: 根据所述爬取规则中用于描述后续地址的字符串构成特征的第三属性,从下载的数据中解析出要下载的后续地址。
9.根据权利要求8所述的方法,其中,所述第三属性是xpath表达式。
10.根据权利要求4所述的方法,其中,步骤b)包括: 从第一下载队列中读取一条记录; 使用在所述数据库中维护的第一去重列表,对所述记录进行去重;以及 根据所述记录来下载相应数据。
11.根据权利要求10所述的方法,其中,对所述记录进行去重的步骤包括: 当确定所述记录与所述第一去重列表中的记录匹配时,跳过所述记录并从所述第一下载队列中读取下一条记录。
12.根据权利要求10所述的方法,其中,在步骤e)之前,所述方法还包括以下步骤: 使用所述记录中的地址来更新所述第一去重列表;以及步骤e)包括:在所述后续地址属于所述第一下载队列的情况下,使用更新后的所述第一去重列表对所述后续地址去重,并将其存入所述第一下载队列;以及 在所述后续地址属于所述第二下载队列的情况下,使用在所述数据库中维护的第二去重列表对所述后续地址去重,相应更新所述第二去重列表,并将其存入所述第二下载队列。
13.根据权利要求12所述的方法,其中,步骤b)包括: 按优先级从所述第二下载队列中读取待下载地址; 使用在所述数据库中维护的第三去重列表对所述待下载地址进行去重; 对由所述待下载地址指向的数据进行下载;以及 更新所述第三去重列表。
14.根据权利要求13所述的方法,其中,步骤b)还包括: 对已下载的数据进行检查; 计算已下载的数据的数字摘要; 基于所述数字摘要,使用在所述数据库中维护的第四去重列表对已下载的数据进行去重; 更新所述第四去重列表;以及 将所述已下载的数据存入文件 系统中。
15.根据权利要求14所述的方法,其中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每条记录均包括有效期,当使用各个去重列表对相应地址进行去重并且在去重列表中存在与相应地址匹配的记录时,所述方法包括以下步骤: 判断所述记录的有效期是否已到期,如果已到期,则不对相应地址进行去重,如果未到期,则对相应地址进行去重。
16.根据权利要求15所述的方法,其中,所述爬取规则还包括第四属性,当所述第四属性的值为“真”时,通过记录对包括所述第四属性在内的所述爬取规则的使用的次数,来识别当前下载的链接在相应网站的应用列表的第几页上。
17.根据权利要求16所述的方法,其中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表时,在当前下载的链接在应用列表的预定页数的页面上的情况下,与当前下载的链接在应用列表的预定页数之后的页面上的情况下相比,将去重列表中对应记录的有效期设置为更大。
18.根据权利要求17所述的方法,其中,所述预定页数小于等于5页。
19.根据权利要求1~18中任一项所述的方法,其中,由所述数据库来提供与网站数据下载相关的统计信息。
20.根据权利要求19所述的方法,其中,所述统计信息包括以下一项或多项:所述多个下载队列的当前长度、指定时间段内各个去重列表的长度、或各个去重列表的总长度。
21.根据权利要求1所述的方法,其中,所述数据库是key-value型数据库。
22.根据权利要求21所述的方法,其中,所述数据库是Redis数据库。
23.根据权利要求1所述的方法,其中,所述预定条件是所有下载队列为空、达到预定爬取深度、或二者的组合。
24.一种用于下载网站数据的分布式系统,包括: 控制器,读取起始地址列表中的一个或多个地址,并将所述一个或多个地址存入在数据库中维护的多个下载队列中的至少一个下载队列; 数据库,用于维护多个下载队列,其中,所述多个下载队列至少包括第一下载队列和第二下载队列,且各个下载队列对应于不同类型的数据; 多个下载模块,用于根据所述多个下载队列来分别下载多个类型的数据,从根据所述第一下载队列下载的数据中解析出要下载的后续地址,判断所述后续地址属于哪个下载队列,根据所述判断的结果,将所述后续地址存入相应下载队列中;以及重复上述过程,直到满足预定条件为止。
25.根据权利要求24所述的分布式系统,其中,所述多个下载模块被进一步配置为: 按照在所述数据库中集中维护的针对各个网站的下载间隔,根据相应下载队列中的记录,从相应网站下载数据。
26.根据权利要求24所述的分布式系统,其中,所述第一下载队列是网页下载队列,以及所述第二下载队列是应用下载队列。
27.根据权利要求24所述的分布式系统,其中,针对每个要下载的网站,预定义由多个下载模块统一使用的、并针对所述网站的不同页面类型单独规定的一条或多条爬取规则。
28.根据权利要求27所述的分布式系统,其中,所述下载模块被配置为: 当所述爬取规则包括指示所述后续地址的类型的第一属性时,根据所述第一属性来判断所述后续地址属于哪个下载队列。
29.根据权利要求28所述的分布式系统,其中,所述下载模块还被配置为: 当所述爬取规则不包括指示所述后续地址的类型的第一属性时,判断所述后续地址属于第二下载队列。
30.根据权利要求27所述的分布式系统,其中,所述下载模块被配置为: 进一步判断所述后续地址是否满足由所述爬取规则中的第二属性所定义的正则表达式,如果满足所述正则表达式,则将作为所述后续地址与所述正则表达式匹配的结果的各字符串拼接为要存入相应下载队列中的地址,否则跳过所述后续地址。
31.根据权利要求27所述的分布式系统,其中,所述下载模块被配置为: 根据所述爬取规则中用于描述后续地址的字符串构成特征的第三属性,从下载的数据中解析出要下载的后续地址。
32.根据权利要求31所述的分布式系统,其中,所述第三属性是xpath表达式。
33.根据权利要求27所述的分布式系统,其中,所述下载模块被配置为: 从第一下载队列中读取一条记录; 使用在所述数据库中维护的第一去重列表,对所述记录进行去重;以及 根据所述记录来下载相应数据。
34.根据权利要求33所述的分布式系统,其中,所述下载模块还被配置为: 当确定所述记录与所述第一去重列表中的记录匹配时,跳过所述记录并从所述第一下载队列中读取下一条记录。
35.根据权利要求33所述的分布式系统,其中,所述下载模块被配置为: 使用所述记录中的地址来更新所述第一去重列表; 在所述后续地址属于所述第一下载队列的情况下,使用更新后的所述第一去重列表对所述后续地址去重,并将其存入所述第一下载队列;以及在所述后续地址属于所述第二下载队列的情况下,使用在所述数据库中维护的第二去重列表对所述后续地址去重,相应更新所述第二去重列表,并将其存入所述第二下载队列。
36.根据权利要求35所述的分布式系统,其中,所述下载模块还被配置为: 按优先级从所述第二下载队列中读取待下载地址; 使用在所述数据库中维护的第三去重列表对所述待下载地址进行去重; 对由所述待下载地址指向的数据进行下载;以及 更新所述第三去重列表。
37.根据权利要求36所述的分布式系统,其中,所述下载模块还被配置为: 对已下载的数据进行检查; 计算已下载的数据的数字摘要; 基于所述数字摘要,使用在所述数据库中维护的第四去重列表对已下载的数据进行去重; 更新所述第四去重列表;以及 将所述已下载的数据存入文件系统中。
38.根据权利要求37所述的分布式系统,其中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每条记录均包括有效期,当使用各个去重列表对相应地址进行去重并且在去重列表中存在 与相应地址匹配的记录时,所述下载模块还被配置为: 判断所述记录的有效期是否已到期,如果已到期,则不对相应地址进行去重,如果未到期,则对相应地址进行去重。
39.根据权利要求38所述的分布式系统,其中,所述爬取规则还包括第四属性,当所述第四属性的值为“真”时,通过记录对包括所述第四属性在内的所述爬取规则的使用的次数,来识别当前下载的链接在相应网站的应用列表的第几页上。
40.根据权利要求39所述的分布式系统,其中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表时,在当前下载的链接在应用列表的预定页数的页面上的情况下,与当前下载的链接在应用列表的预定页数之后的页面上的情况下相比,所述下载模块将去重列表中对应记录的有效期设置为更大。
41.根据权利要求40所述的分布式系统,其中,所述预定页数小于等于5页。
42.根据权利要求24~41中任一项所述的分布式系统,其中,由所述数据库来提供与网站数据下载相关的统计信息。
43.根据权利要求42所述的分布式系统,其中,所述统计信息包括以下一项或多项:所述多个下载队列的当前长度、指定时间段内各个去重列表的长度、或各个去重列表的总长度。
44.根据权利要求24所述的分布式系统,其中,所述数据库是key-value型数据库。
45.根据权利要求44所述的分布式系统,其中,所述数据库是Redis数据库。
46.根据权利要求24所述的分布式系统,其中,所述预定条件是所有下载队列为空、达到预定爬取深度、或二者的组合。
【文档编号】H04L29/08GK103475688SQ201310198688
【公开日】2013年12月25日 申请日期:2013年5月24日 优先权日:2013年5月24日
【发明者】吴自立 申请人:北京网秦天下科技有限公司