本申请涉及互联网领域,具体而言,涉及一种网页爬取方法和装置。
背景技术:
传统的搜索引擎优化(Search Engine Optimization,简称为SEO)业务中,通常需要帮助用户分析关键词在搜索引擎中的排名。通常,用户会预设一组关键词,定期通过网络爬虫去爬取这些关键词在搜索引擎中的排名,即通过网络爬虫爬取关键词对应的搜索引擎结果页,其中,关键词对应的搜索引擎结果页是指在搜索引擎(例如,百度,搜狗等搜索引擎)中输入关键词后显示的搜索结果页面。
但是,搜索引擎为了防止机器人(例如,网络爬虫)访问,或者减少非正常访问流量,往往会对单个IP地址的搜索速度或者搜索次数进行限制(即反爬虫策略),而通常用户指定的关键词累计起来会达到一个非常大的数量,因此,仅通过单台机器或者IP地址进行关键词搜索引擎结果页的爬取不仅爬取效率较低,而且容易因搜索引擎的反爬虫策略导致无法爬取所有关键词对应的搜索引擎结果页。
针对相关技术中通过单台服务器的网络爬虫爬取关键词对应的搜索引擎结果页时效率较低的问题,目前尚未提出有效的解决方案。
技术实现要素:
本申请的主要目的在于提供一种网页爬取方法和装置,以解决相关技术中通过单台服务器的网络爬虫爬取关键词搜索引擎结果页时效率较低的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种网页爬取方法。该方法包括:多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词;以及多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页。
进一步地,多台服务器包括第一服务器,多台服务器分别从任务队列中获取关键词组包括第一服务器从任务队列中获取关键词组,第一服务器从任务队列中获取关键词组包括:第一服务器检测任务队列中是否存在待爬取的关键词组;第一服务器在检测出任务队列中存在待爬取的关键词组时,锁定任务队列,其中,锁定的任务队列仅能够被第一服务器读取;以及第一服务器从锁定的任务队列中获取关键词组,并释放 任务队列,其中,释放后的任务队列能够被多台服务器中任意一台服务器读取。
进一步地,多台服务器包括第一服务器,第一服务器获取的关键词组为第一关键词组,第一服务器的网络爬虫为第一网络爬虫,多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页包括第一服务器通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页,第一服务器通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页包括:遍历第一关键词组,通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页;判断第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页是否成功;以及在判断出存在爬取第一关键词组中的关键词对应的搜索引擎结果页失败的情况时,将第一关键词组中爬取失败的关键词添加至失败列表。
进一步地,在将第一关键词组中爬取失败的关键词添加至失败列表之后,该方法还包括:将失败列表中的关键词打包为新的关键词组;以及将新的关键词组添加至任务队列中。
进一步地,将失败列表中的关键词打包为新的关键词组包括:获取失败列表中关键词的重试次数;判断失败列表中关键词的重试次数是否小于预设值;以及在判断出失败列表中关键词的重试次数小于预设值时,将失败列表中关键词打包为新的关键词组。
进一步地,在多台服务器分别从任务队列中获取关键词组之前,方法还包括:按照预设规则对多个关键词进行分组,得到多个组别的关键词组;以及将多个组别的关键词组按照优先级存储于任务队列中。
为了实现上述目的,根据本申请的另一方面,提供了一种网页爬取装置。该装置包括:获取单元,用于使多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词;以及爬取单元,用于使多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页。
进一步地,多台服务器包括第一服务器,获取单元包括:检测模块,用于使第一服务器检测任务队列中是否存在待爬取的关键词组;锁定模块,用于使第一服务器在检测出任务队列中存在待爬取的关键词组时,锁定任务队列,其中,锁定的任务队列仅能够被第一服务器读取;以及获取模块,用于使第一服务器从锁定的任务队列中获取关键词组,并释放任务队列,其中,释放后的任务队列能够被多台服务器中任意一台服务器读取。
进一步地,多台服务器包括第一服务器,第一服务器获取的关键词组为第一关键 词组,第一服务器的网络爬虫为第一网络爬虫,爬取单元包括:爬取模块,用于遍历第一关键词组,通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页;判断模块,判断第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页是否成功;以及添加模块,用于在判断出存在爬取第一关键词组中的关键词对应的搜索引擎结果页失败的情况时,将第一关键词组中爬取失败的关键词添加至失败列表。
进一步地,该装置还包括:打包单元,用于将失败列表中的关键词打包为新的关键词组;以及添加单元,用于将新的关键词组添加至任务队列中。
本申请通过多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词;以及多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页,本申请通过多台服务器分布式地爬取关键词对应的搜索引擎结果页,从而可以提高爬取关键词对应的搜索引擎结果页的效率,也可以降低触发搜索引擎反爬虫策略的可能性,解决了相关技术中通过单台服务器的网络爬虫爬取关键词搜索引擎结果页时效率较低的问题,进而达到了提高爬取关键词对应的搜索引擎结果页的效率效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的网页爬取方法的流程图;
图2是根据本申请实施例的分布式爬取网页的示意图;以及
图3是根据本申请实施例的网页爬取装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了便于描述,以下对本申请涉及的一些概念进行说明:
搜索引擎优化,即Search Engine Optimization,简称为SEO。搜索引擎优化是一种利用搜索引擎的搜索规则来提高目标网站在有关搜索引擎内的排名的方式。
队列,是一种特殊的线性表,其只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,亦称作先进先出(First In First Out)的线性表,简称为FIFO表,本申请实施例的队列的形式可以是分布式队列组件,也可以采用数据库的形式。
网络爬虫:又被称为网页蜘蛛或网络机器人,是一种按照预设规则自动抓取万维网信息的程序或者脚本。
根据本申请实施例,提供了一种网页爬取方法。图1是根据本申请实施例的网页爬取方法的流程图,如图1所示,该方法包括如下的步骤S102至步骤S104:
步骤S102,多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词。
具体地,可以通过调度器将用户预设的多个关键词进行分组,并将分组后得到的关键词组放置于任务队列中。优选地,为了保证优先爬取重要程度高的关键词对应的搜索引擎结果页,在多台服务器分别从任务队列中获取关键词组之前,该方法还包括:按照预设规则对多个关键词进行分组,得到多个组别的关键词组;以及将多个组别的关键词组按照优先级存储于任务队列中。
具体地,本申请实施例可以对多个关键词按照重要程度(例如,需要优选处理的关键词重要程度高)进行排序,并按照排序依次取预设数量的关键词组成一组,例如,总共300个关键词,将这300个关键词按照重要程度进行排序,并按照这300个关键词的排序,依次取50个关键词组成一个关键词组,可以得到6个关键词组,并将这6个关键词组按照优先级添加至任务队列中,其中,重要程度高的关键词组优先级高,重要程度低的关键词组优先级低。
本申请实施例的多个服务器分别从任务队列中获取关键词组进行网页爬取任务,如图2所示,所有关键词通过调度器分为N组,即关键词组1至关键词组N,三台服务器(即服务器1、服务器2和服务器3)依次从任务队列中获取关键词组,例如,服务器1获取关键词组1、服务器2获取关键词组2、服务器3获取关键词组3,每个服务器在处理获取到的关键词组的爬取任务时,会将当前关键词组的状态进行记录,例如,记录当前关键词组的任务状态(例如,爬取成功、爬取失败、等待、爬取中等)、重试次数(例如,可以将其初始值设为0,在爬取失败时重试次数加1)等。在处理完获取到的关键词组中每一个关键词的爬取任务时,重新从任务队列中获取新的关键词组进行处理,以此类推。
需要说明的是,本申请实施例可以对多个关键词中相同的关键词进行合并,以减少爬取总量。本申请实施例也可以采用多个任务队列,以匹配不同的爬取策略(例如,不同的搜索引擎、爬取限度等),例如,任务队列1用于存储基于百度搜索的关键词,任务队列2用于存储基于搜狗搜索的关键词。
可选地,多台服务器包括第一服务器,多台服务器分别从任务队列中获取关键词组包括第一服务器从任务队列中获取关键词组,第一服务器从任务队列中获取关键词组包括:第一服务器检测任务队列中是否存在待爬取的关键词组;第一服务器在检测出任务队列中存在待爬取的关键词组时,锁定任务队列,其中,锁定的任务队列仅能够被第一服务器读取;以及第一服务器从锁定的任务队列中获取关键词组,并释放任务队列,其中,释放后的任务队列能够被多台服务器中任意一台服务器读取。
本申请实施例的第一服务器可以是多台服务器中任意一台服务器。具体地,第一服务器可以先检测任务队列中是否存在待爬取的关键词组,在检测到任务队列中不存在待爬取的关键词组时,则等待预设时间后重新检测任务队列中是否存在待爬取的关键词组,在检测到任务队列中存在待爬取的关键词组时,则锁定任务队列,从而使得其他服务器此时无法访问该任务队列,以避免多线程同时读取任务队列发生冲突,在第一服务器从任务队列中读取到关键词组之后,释放任务队列(即对任务队列进行解锁),使得所有的服务器均可以对该任务队列进行访问。
步骤S104,多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页。
本申请实施例的多台服务器均设置有网络爬虫,在多台服务器分别获取到关键词组后,多台服务器通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页,其中,关键词对应的搜索引擎结果页是指在搜索引擎(例如,百度,搜狗等搜索引擎)中输入关键词后显示的搜索结果页面。以图2所示为例进行说明,服务器1在获取到关键词组1后,服务器1通过其网络爬虫爬取关键词组1中各个关键 词对应的搜索引擎结果页,服务器2和服务器3爬取网页过程同服务器1。
本申请实施例通过多台服务器分布式的处理多个关键词对应的搜索引擎结果页的爬取任务,一方面可以提高爬取多个关键词对应的搜索引擎结果页的效率,另一方面在关键词数量过多时,可以降低触发搜索引擎的反爬虫策略的可能性,以保证获取到所有关键词对应的搜索引擎结果页。
本申请实施例通过多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词;以及多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页,本申请实施例通过多台服务器分布式地爬取关键词对应的搜索引擎结果页,从而可以提高爬取关键词对应的搜索引擎结果页的效率,也可以降低触发搜索引擎反爬虫策略的可能性,解决了相关技术中通过单台服务器的网络爬虫爬取关键词搜索引擎结果页时效率较低的问题,进而达到了提高爬取关键词对应的搜索引擎结果页的效率效果。
优选地,为了避免爬取失败的关键词被遗漏,多台服务器包括第一服务器,第一服务器获取的关键词组为第一关键词组,第一服务器的网络爬虫为第一网络爬虫,多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页包括第一服务器通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页,第一服务器通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页包括:遍历第一关键词组,通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页;判断第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页是否成功;以及在判断出存在爬取第一关键词组中的关键词对应的搜索引擎结果页失败的情况时,将第一关键词组中爬取失败的关键词添加至失败列表。
本申请实施例以第一服务器为例进行说明,具体地,第一服务器遍历第一关键词组中的每一个关键词,并通过其网络爬虫(即第一网络爬虫)爬取每个关键词对应的搜索引擎结果页,但是,由于网络异常、服务器异常、数据解析异常和触发反爬虫等原因会造成网络爬虫爬取关键词对应的搜索引擎结果页失败,即未能成功获取到关键词对应的搜索引擎结果页。因此,本申请实施例对网络爬虫的爬取结果进行检测,如果网络爬虫成功爬取到关键词组中每一个关键词对应的搜索引擎结果页,记录该关键词组的出状态为成功,如果存在爬取关键词组中某个或某些关键词对应的搜索引擎结果页失败时,则将爬取失败的关键词添加至失败列表中,以进行获取失败的关键词的标识,并将该关键词组的处理状态记录为失败,并且重试次数加1。本申请实施例通过对爬取失败的关键词进行记录,可以避免爬取失败的关键词被遗漏。
需要说明的是,在某个服务器爬取关键词对应的搜索引擎结果页失败时,可以让该服务器休眠预设时间后再重新执行爬取任务。
优选地,在将第一关键词组中爬取失败的关键词添加至失败列表之后,该方法还包括:将失败列表中的关键词打包为新的关键词组;以及将新的关键词组添加至任务队列中。
本申请实施例在将爬取失败的关键词添加至失败列表之后,从失败列表中获取爬取失败的关键词,并将爬取失败的关键词重新打包为一个新的关键词组存入至任务队列中,从而该爬取失败的关键词可以再次被爬取,从而可以避免爬取失败的关键词对应的数据不被遗漏,即可以保证爬取到全部关键词对应的搜索引擎结果页。
优选地,将失败列表中的关键词打包为新的关键词组包括:获取失败列表中关键词的重试次数;判断失败列表中关键词的重试次数是否小于预设值;以及在判断出失败列表中关键词的重试次数小于预设值时,将失败列表中关键词打包为新的关键词组。
实际情况中,一些关键词可能多次被爬取后仍未能成功获取到其对应的搜索引擎结果页,为了节省系统资源,可以停止对这些关键词的爬取任务,通过手工等方式去获取这些关键词对应的搜索引擎结果页。
具体地,本申请由于预先记录了关键词组的重试次数(即失败次数),通过获取失败列表中关键词的重试次数并与预设值进行比较,如果重试次数小于预设值则对失败列表中的关键词进行打包并存储至任务队列中,如果重试次数大于预设值则不进行打包处理。
从以上的描述中,可以看出,本申请实施例对于大量的关键词,通过化整为零的方式,分配到不同IP地址的机器(即服务器)上,达到分布式爬取的目的,同时可以降低触发反爬虫的可能性;在爬取失败的情形下(通常是由于反爬虫机制触发),通过重组关键词的方式,尝试再次爬取,保证每个关键词都能爬到数据而不会被遗漏;将关键词分组,并添加到爬取队列,队列的形式可以是分布式队列组件,也可以是数据库的形式;爬虫主动申请任务,从而可以根据实际情况控制爬取速度;相同的关键词可以合并,以减少爬取总量。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本申请实施例的另一方面,提供了一种网页爬取装置,该网页爬取装置可以用于执行本申请实施例的网页爬取方法,本申请实施例的网页爬取方法也可以通过本申请实施例的网页爬取装置来执行。
图3是根据本申请实施例的网页爬取装置的示意图,如图3所示,该装置包括:获取单元10和爬取单元20。
获取单元10,用于使多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词。
可选地,多台服务器包括第一服务器,获取单元10包括:检测模块,用于使第一服务器检测任务队列中是否存在待爬取的关键词组;锁定模块,用于使第一服务器在检测出任务队列中存在待爬取的关键词组时,锁定任务队列,其中,锁定的任务队列仅能够被第一服务器读取;以及获取模块,用于使第一服务器从锁定的任务队列中获取关键词组,并释放任务队列,其中,释放后的任务队列能够被多台服务器中任意一台服务器读取。
爬取单元20,用于使多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页。
可选地,多台服务器包括第一服务器,第一服务器获取的关键词组为第一关键词组,第一服务器的网络爬虫为第一网络爬虫,爬取单元20包括:爬取模块,用于遍历第一关键词组,通过第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页;判断模块,判断第一网络爬虫爬取第一关键词组中每个关键词对应的搜索引擎结果页是否成功;以及添加模块,用于在判断出存在爬取第一关键词组中的关键词对应的搜索引擎结果页失败的情况时,将第一关键词组中爬取失败的关键词添加至失败列表。
本申请实施例通过获取单元10使多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词;以及爬取单元20使多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页,本申请实施例通过多台服务器分布式地爬取关键词对应的搜索引擎结果页,从而可以提高爬取关键词对应的搜索引擎结果页的效率,也可以降低触发搜索引擎反爬虫策略的可能性,解决了相关技术中通过单台服务器的网络爬虫爬取关键词搜索引擎结果页时效率较低的问题,进而达到了提高爬取关键词对应的搜索引擎结果页的效率效果。
优选地,该装置还包括:打包单元,用于将失败列表中的关键词打包为新的关键词组;以及添加单元,用于将新的关键词组添加至任务队列中。
所述网页爬取装置包括处理器和存储器,上述获取单元和爬取单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来爬取关键词对应的搜索引擎结果页。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:多台服务器分别从任务队列中获取关键词组,其中,任务队列中存储有多个待爬取的关键词组,每个待爬取的关键词组包含多个关键词;以及多台服务器分别通过各自的网络爬虫爬取获取的关键词组中每个关键词对应的搜索引擎结果页。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。