一种网络爬虫方法及装置
技术领域
本发明涉及互联网技术领域,尤其涉及一种网络爬虫方法及装置。
背景技术
爬虫作为一种自动获取网页内容的程序,是搜索引擎的重要组成部分。网络爬虫,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。具体的爬虫任务一般分为下载、抽取、清洗、存储四个阶段,且每个阶段都有各自的输入输出,也就是说,不同阶段的输入或输出的内容、格式均有所不同,从而导致爬虫的过程不可分割,必须按照既定的阶段顺序执行,相邻两个阶段之间的耦合性较大,且网络爬虫的代码重用性低。
发明内容
本发明实施例提供一种网络爬虫方法及装置,用于解除网络爬虫任务中相邻执行阶段之间的耦合性,从而实现网络爬虫的每个执行阶段的模块化。
一种网络爬虫方法,包括以下步骤:
获取网络爬虫任务的配置文件,所述配置文件包括所述网络爬虫任务的每一个执行阶段的标识、所述每一个执行阶段的执行顺序及所述每一个执行阶段对应的配置参数;
根据所述每一个执行阶段的标识以及所述每一个执行阶段的执行顺序,确定所述网络爬虫的当前执行阶段;
获取所述当前执行阶段的输入数据,所述输入数据为所述当前执行阶段之前的上一个执行阶段的输出数据,所述输入数据或所述输出数据是通过预设的输入输出接口格式进行输入或输出的;
根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段。
本发明实施例的一些有益效果可以包括:
上述技术方案,通过确定网络爬虫任务的当前执行阶段,并将上一个执行阶段的输出数据作为当前执行阶段的输入数据,且输入数据和输出数据都是通过预设的输入输出接口格式进行输入或输出的,使得每个执行阶段的输入输出接口格式唯一,从而使每个执行阶段的输出数据都可通过预设的输入输出接口格式作为任意一个执行阶段的输入数据,解除了网络爬虫任务中相邻执行阶段之间的耦合性,使每个执行阶段的执行更加模块化,提高了网络爬虫的效率。
在一个实施例中,所述当前执行阶段的输入数据包括所述网络爬虫任务的配置文件和所述上一个执行阶段的执行结果数据。
该实施例使得当前执行阶段能够根据输入数据中的配置文件以及上一个执行阶段的执行结果数据来执行,从而确保上一个执行阶段的输出数据能够作为当前执行阶段的输入数据传递给当前执行阶段,以提高网络爬虫的效率。
在一个实施例中,所述根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段之后,所述方法还包括:
生成包括所述当前执行阶段的执行结果数据的输出数据。
该实施例中,通过生成包括当前执行阶段的执行结果数据的输出数据,从而使得当前执行阶段的输出数据能够作为下一个执行阶段的输入数据传递给下一个执行阶段,并且下一个执行阶段能够利用输入数据中当前执行阶段的执行结果来执行,从而提高网络爬虫的效率。
在一个实施例中,所述根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段,包括:
将所述输入数据中的配置参数的类型和所述当前执行阶段对应的配置参数的类型进行对比,得到所述当前执行阶段对应的配置参数中与所述输入数据中的配置参数类型不匹配的第一配置参数;
确定将所述输入数据中的配置参数转换为所述第一配置参数的转换规则;
根据所述转换规则对所述输入数据中的配置参数进行转换,得到所述当前执行阶段对应的配置参数;
根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段。
该实施例中,通过将输入数据中与当前执行阶段对应的配置参数类型不相匹配的配置参数进行转换,使得输入数据中的配置参数类型能够匹配当前执行阶段对应的配置参数类型,从而使每个执行阶段的输出数据都可作为任意一个执行阶段的输入数据,解除了网络爬虫任务中相邻执行阶段之间的耦合性,使每个执行阶段的执行更加模块化,提高了网络爬虫的效率。
在一个实施例中,所述配置文件中包括线程配置数据;所述方法还包括:
读取所述线程配置数据,所述线程配置数据中包括每一个执行阶段的单次并行执行的线程数;
按照所述每一个执行阶段的单次并行执行的线程数,执行所述每一个执行阶段。
该实施例中,通过按照每一个执行阶段的单次并行执行的线程数来执行每一个执行阶段,从而能够高效地执行网络爬虫任务的每一个执行阶段,提高网络爬虫的效率。
一种网络爬虫装置,包括:
第一获取模块,用于获取网络爬虫任务的配置文件,所述配置文件包括所述网络爬虫任务的每一个执行阶段的标识、所述每一个执行阶段的执行顺序及所述每一个执行阶段对应的配置参数;
确定模块,用于根据所述每一个执行阶段的标识以及所述每一个执行阶段的执行顺序,确定所述网络爬虫任务的当前执行阶段;
第二获取模块,用于获取所述当前执行阶段的输入数据,所述输入数据为所述当前执行阶段之前的上一个执行阶段的输出数据,所述输入数据或所述输出数据是通过预设的输入输出接口格式进行输入或输出的;
第一执行模块,用于根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段。
在一个实施例中,所述第二获取模块获取的当前执行阶段的输入数据包括所述网络爬虫任务的配置文件和所述上一个执行阶段的执行结果数据。
在一个实施例中,所述装置还包括:
生成模块,用于根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段之后,生成包括所述当前执行阶段的执行结果数据的输出数据。
在一个实施例中,所述第一执行模块包括:
对比子模块,用于将所述输入数据中的配置参数的类型和所述当前执行阶段对应的配置参数的类型进行对比,得到所述当前执行阶段对应的配置参数中与所述输入数据中的配置参数类型不匹配的第一配置参数;
确定子模块,用于确定将所述输入数据中的配置参数转换为所述第一配置参数的转换规则;
转换子模块,用于根据所述转换规则对所述输入数据中的配置参数进行转换,得到所述当前执行阶段对应的配置参数;
执行子模块,用于根据所述当前执行阶段对应的配置参数和所述输入数据执行所述当前执行阶段。
在一个实施例中,所述装置还包括:
读取模块,用于读取所述配置文件中的线程配置数据,所述线程配置数据中包括每一个执行阶段的单次并行执行的线程数;
第二执行模块,用于按照所述每一个执行阶段的单次并行执行的线程数,执行所述每一个执行阶段。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例中一种网络爬虫方法的流程图;
图2为本发明实施例中一种网络爬虫方法中步骤S14的流程图;
图3为本发明实施例中一种网络爬虫方法的流程图;
图4为本发明实施例中一种网络爬虫装置的框图;
图5为本发明实施例中一种网络爬虫装置的框图;
图6为本发明实施例中一种网络爬虫装置中第一执行模块的框图;
图7为本发明实施例中一种网络爬虫装置的框图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1为本发明实施例中一种网络爬虫方法的流程图。如图1所示,该网络爬虫方法包括以下步骤S11-S14:
步骤S11,获取网络爬虫任务的配置文件,配置文件包括网络爬虫任务的每一个执行阶段的标识、每一个执行阶段的执行顺序及每一个执行阶段对应的配置参数。
步骤S12,根据每一个执行阶段的标识以及每一个执行阶段的执行顺序,确定网络爬虫任务的当前执行阶段。
步骤S13,获取当前执行阶段的输入数据,输入数据为当前执行阶段之前的上一个执行阶段的输出数据,输入数据或输出数据是通过预设的输入输出接口格式进行输入或输出的。
其中,当前执行阶段的输入数据包括网络爬虫任务的配置文件和上一个执行阶段的执行结果数据,执行当前执行阶段时可根据网络爬虫任务的配置文件确定出与当前执行阶段对应的配置参数。当当前执行阶段为网络爬虫任务的第一个执行阶段时,例如下载,那么输入数据中的上一个执行阶段的执行结果数据则为空。
步骤S14,根据当前执行阶段对应的配置参数和输入数据执行当前执行阶段。
采用本发明实施例提供的技术方案,通过确定网络爬虫任务的当前执行阶段,并将上一个执行阶段的输出数据作为当前执行阶段的输入数据,且输入数据和输出数据都是通过预设的输入输出接口格式进行输入或输出的,使得每个执行阶段的输入输出接口格式唯一,从而使每个执行阶段的输出数据都可通过预设的输入输出接口格式作为任意一个执行阶段的输入数据,解除了网络爬虫任务中相邻执行阶段之间的耦合性,使每个执行阶段的执行更加模块化,提高了网络爬虫的效率。
上述方法中,步骤S13中所说的输入输出接口格式是具有唯一性和通用性的,即,预先设定的输入输出接口格式适用于网络爬虫任务的每一个执行阶段的输入或输出,以下为本发明实施例可行的一种输入输出接口格式:
defprocess_task(self,task):
#主处理程序
return[]
通过上述输入输出接口格式,网络爬虫任务的每一个执行阶段开始执行时,输入数据均用task来表示,其中,task为一个字典或者哈希表类型,输出即为处理后的task,也是字典或者哈希表类型。每一个执行阶段完成后,得到的执行结果数据可以按照列表的形式放入到task中,然后传递给下一个执行阶段,下一个执行阶段通过上述输入输出接口格式,遍历循环列表形式的上一个执行阶段的执行结果数据,并将列表中的每个元素都输入给process_task程序进行处理,处理完成后得到输出数据,继续传递给下一个执行阶段,从而完成网络爬虫任务的整个流程。
上述实施例中,task的格式为:{“key1”:“value1”,“key2”:“value2”,…,“keyN”:“valueN”,},task中的内容包括两部分:爬虫任务中的一些配置参数keyN和根据这些配置参数执行的每一个执行阶段的执行结果数据。由于不同的执行阶段对应的配置参数不同,且有可能需要一些中间结果作为输入,因此task中包括整个网络爬虫任务可能需要的所有配置参数,以方便每一个执行阶段对配置参数的提取。
以下通过两个具体实施例来说明网络爬虫任务中的每一个执行阶段的执行过程。
实施例一
在实施例一中,当前执行阶段为转换阶段,网络爬虫任务的配置文件中,与转换阶段对应的配置文件格式为:
在执行转换阶段时,通过预设的输入输出接口格式获取转换阶段的输入数据即task,该输入数据中包括网络爬虫任务的配置文件以及上一个执行阶段的执行结果顺序,根据输入数据,即可获知转换阶段对应的配置参数。上述配置文件中,workertype=“transformer”表明该执行阶段为转换阶段,“raw_code”和“code”的值为task中的配置参数keyN的名称,“rule”表示转换阶段的转换规则,首先从task中读取配置参数为“weibo_id”的值,然后根据转换规则(即拼接的方式)将“weibo_id”拼接成http://weibo.cn/[weibo_id],拼接后的值即为转换阶段的执行结果数据,将拼接后的值放入task中,从而生成包括转换阶段的执行结果数据的输出数据,该输出数据可作为下一个执行阶段的输入数据传递给下一个执行阶段,下一个执行阶段执行时就可以从task中读取到配置参数为“weibo_url”的值并使用。
实施例二
在实施例二中,当前执行阶段为存储阶段,网络爬虫任务的配置文件中,与存储阶段对应的配置文件格式为:
在执行存储阶段时,通过预设的输入输出接口格式获取存储阶段的输入数据即task,该输入数据中包括网络爬虫任务的配置文件以及上一个执行阶段的执行结果顺序,根据输入数据,即可获知存储阶段对应的配置参数。上述配置文件中,workertype=“saver”表明该执行阶段为存储阶段,buffer_num=“20000”表明缓存20000条数据,split_tag=“|”表明字段之间的分隔符为“|”,“fieldcode”的值表示task中的配置参数keyN的名称,首先从task中读取上述配置文件,以及配置文件中存储阶段对应的配置参数的值,然后将task中这些配置参数的值进行分割存储。
在一个实施例中,步骤S14之后,上述方法还包括以下步骤:生成包括当前执行阶段的执行结果数据的输出数据。当前执行阶段的输出数据中包括网络爬虫任务的配置文件和当前执行阶段的执行结果数据,这样,当当前执行阶段的输出数据作为下一个执行阶段的输入数据传递给下一个执行阶段后,下一个执行阶段就可以根据输出数据中的配置文件确定出与其相对应的配置参数,并从输入数据中读取出与其相对应的配置参数,结合当前执行阶段的执行结果数据,执行下一个执行阶段。
在一个实施例中,如图2所示,上述步骤S14可实施为以下步骤S141-S144:
步骤S141,将输入数据中的配置参数的类型和当前执行阶段对应的配置参数的类型进行对比,得到当前执行阶段对应的配置参数中与输入数据中的配置参数类型不匹配的第一配置参数。
步骤S142,确定将输入数据中的配置参数转换为第一配置参数的转换规则。
步骤S143,根据转换规则对输入数据中的配置参数进行转换,得到当前执行阶段对应的配置参数。
步骤S144,根据当前执行阶段对应的配置参数和输入数据执行当前执行阶段。
举例来说,当得到当前执行阶段对应的配置参数中与输入数据中的配置参数类型不匹配的第一配置参数之后,执行爬虫任务中的转换阶段,与转换阶段对应的配置文件格式为:
其中,“raw_code”和“code”都表示task中的配置参数keyN的名称,从上述配置文件可得出,
本实施例中,通过将输入数据中与当前执行阶段对应的配置参数类型不相匹配的配置参数进行转换,使得输入数据中的配置参数类型能够匹配当前执行阶段对应的配置参数类型,从而使每个执行阶段的输出数据都可作为任意一个执行阶段的输入数据,解除了网络爬虫任务中相邻执行阶段之间的耦合性,使每个执行阶段的执行更加模块化,提高了网络爬虫的效率。
在一个实施例中,网络爬虫任务的配置文件中还包括线程配置数据,因此,如图3所示,上述方法还包括以下步骤S31-S32:
步骤S31,读取线程配置数据,线程配置数据中包括每一个执行阶段的单次并行执行的线程数。
步骤S32,按照每一个执行阶段的单次并行执行的线程数,执行每一个执行阶段。
举例来说,线程配置如下:
<wokertype=“page”n_cpu=“4”process_num=“20”>
由上述线程配置数据可知,n_cpu的值为4,说明程序处理的并行数为4,process_num的值为20,说明当前执行阶段单次并行执行的线程数为20,因此,在程序运行时,按照预先配置好的线程配置数据,可同时并行执行20个线程的当前执行阶段。
需要说明的是,本实施例中所说的线程配置数据是按照执行网络爬虫任务的每一个执行阶段的执行部件的参数来配置的,执行部件的参数可以包括执行部件本身的复杂度或处理相应的执行阶段的速度等,例如,执行下载阶段的下载部件处理逻辑简单,处理速度较快,因此可配置下载部件单次并行执行的线程数较少,例如线程数为1;而执行抽取阶段的抽取部件逻辑比较复杂,处理速度较慢,因此可配置抽取部件单次并行执行的线程数较多,例如线程数为10。可见,本实施例的方案能够根据每个执行部件本身的参数来配置各自不同的线程数,且配置的线程数能够充分利用执行部件的性能,使得执行网络爬虫任务的处理器效率得以提高,从而提高网络爬虫的效率。
此外,网络爬虫任务的配置文件中还可以包括一些辅助信息,辅助信息是按照具体的网络爬虫任务的需要进行配置的。举例如下:
在下载某些网站的过程中,需要配置文件中包括cookie配置及代理配置,该配置如下:
<cookietype=“server”rule=http://yunzhisheng/cookieserver/ReciveCookiesServlet/>
上述配置中配置了一个cookie管理器,管理器通过向服务器请求的方式获取cookie,请求的网址在“rule”属性中。那么,在下载网站的过程中,即可根据上述配置来调用cookie。
对应于上述实施例中的网络爬虫方法,本发明还提供一种网络爬虫装置,用以执行上述网络爬虫方法。
图4为本发明实施例中一种网络爬虫装置的框图,如图4所示,该装置包括:
第一获取模块41,用于获取网络爬虫任务的配置文件,配置文件包括网络爬虫任务的每一个执行阶段的标识、每一个执行阶段的执行顺序及每一个执行阶段对应的配置参数;
确定模块42,用于根据每一个执行阶段的标识以及每一个执行阶段的执行顺序,确定网络爬虫任务的当前执行阶段;
第二获取模块43,用于获取当前执行阶段的输入数据,输入数据为当前执行阶段之前的上一个执行阶段的输出数据,输入数据或输出数据是通过预设的输入输出接口格式进行输入或输出的;
第一执行模块44,用于根据当前执行阶段对应的配置参数和输入数据执行当前执行阶段。
在一个实施例中,第二获取模块43获取的当前执行阶段的输入数据包括网络爬虫任务的配置文件和上一个执行阶段的执行结果数据。
在一个实施例中,如图5所示,上述装置还包括:
生成模块45,用于根据当前执行阶段对应的配置参数和输入数据执行当前执行阶段之后,生成包括当前执行阶段的执行结果数据的输出数据。
在一个实施例中,如图6所示,第一执行模块44包括:
对比子模块441,用于将输入数据中的配置参数的类型和当前执行阶段对应的配置参数的类型进行对比,得到当前执行阶段对应的配置参数中与输入数据中的配置参数类型不匹配的第一配置参数;
确定子模块442,用于确定将输入数据中的配置参数转换为第一配置参数的转换规则;
转换子模块443,用于根据转换规则对输入数据中的配置参数进行转换,得到当前执行阶段对应的配置参数;
执行子模块444,用于根据当前执行阶段对应的配置参数和输入数据执行当前执行阶段。
在一个实施例中,如图7所示,上述装置还包括:
读取模块46,用于读取配置文件中的线程配置数据,线程配置数据中包括每一个执行阶段的单次并行执行的线程数;
第二执行模块47,用于按照每一个执行阶段的单次并行执行的线程数,执行每一个执行阶段。
采用本发明实施例提供的装置,通过确定网络爬虫任务的当前执行阶段,并将上一个执行阶段的输出数据作为当前执行阶段的输入数据,且输入数据和输出数据都是通过预设的输入输出接口格式进行输入或输出的,使得每个执行阶段的输入输出接口格式唯一,从而使每个执行阶段的输出数据都可通过预设的输入输出接口格式作为任意一个执行阶段的输入数据,解除了网络爬虫任务中相邻执行阶段之间的耦合性,使每个执行阶段的执行更加模块化,提高了网络爬虫的效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。