首页> 中国专利> 一种自定义职责链及后置处理模块的分布式爬虫框架

一种自定义职责链及后置处理模块的分布式爬虫框架

摘要

本发明属于互联网广告技术领域,提供了一种自定义职责链及后置处理模块的分布式爬虫框架,包括:创建各种不同类型的任务,每一个任务对应一个不同的任务名称;定义职责链的接口模块;定义后置处理类;采用多机器、多进程抓取多个url,根据任务名称,推送多个不同的url,当任务名称不存在时,重复上述步骤;根据任务名称,得到并处理职责链;完成多个url的抓取后,根据任务名称,得到并执行后置处理类,进行保存文件或其它处理。本发明是在一个系统中定义多个职责链,每个职责链对应一个任务名称,即克服了现有技术中每个任务名称就要对应一套爬虫系统的限制,通用性更强,降低了内存的占用,对软硬件的要求降低,降低了运行和管理成本。

著录项

  • 公开/公告号CN105589949A

    专利类型发明专利

  • 公开/公告日2016-05-18

    原文格式PDF

  • 申请/专利权人 晶赞广告(上海)有限公司;

    申请/专利号CN201510958023.8

  • 发明设计人 汤奇峰;王万宝;汤丽萍;

    申请日2015-12-18

  • 分类号G06F17/30;

  • 代理机构上海国智知识产权代理事务所(普通合伙);

  • 代理人潘建玲

  • 地址 200072 上海市闸北区灵石路695号25幢1101室

  • 入库时间 2023-12-18 15:20:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-29

    授权

    授权

  • 2017-01-18

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20151218

    实质审查的生效

  • 2016-05-18

    公开

    公开

说明书

技术领域

本发明属于互联网广告技术领域,特别涉及一种通过开放接口,整合多类爬虫规则的自定义职责链及后置处理模块的分布式爬虫框架。

背景技术

近年来,随着互联网网站、受众、媒介越来越多,互联网数据呈指数级增长。因此,获取网站资源、整合行业数据显得尤为重要。通过爬虫方法获取网络资源,也成为了一种必要的手段。

爬虫技术从类别上可分为通用的爬虫和垂直爬虫技术。通用的爬虫技术以获取互联网所有的数据为目标,通过链接的方式逐层递进,体系庞大,业务单一。而垂直爬虫技术,则是以获取指定行业、指定网站、指定类别为基础的,通过规则建立网站遍历树,最终提取页面上对应的结构化数据。

相对于通用的爬虫技术,垂直爬虫技术的特点是:定位清晰、具有筛选过滤、业务规则复杂等特点。业内通常的做法是,构建不同的爬虫服务。常见的有:图片或资源下载,构建新闻内的正文抽取,构建比价类的电商、汽车、旅游等各类爬虫。对此,同一公司为了应对各种业务需要,需要同时使用多套爬虫系统,故存在如下缺陷:(1)通用性不强,每上线一套新的业务,就必须开发一套新的爬虫系统,操作复杂,适用性差;(2)管理复杂,多套爬虫系统同时运行,对软件、硬件的要求高,并且管理成本无形增加。

因此,互联网广告技术领域急需一种自定义职责链及后置处理模块的分布式爬虫框架,是在一个系统中定义多个职责链,每个职责链对应一个任务名称,即克服了现有技术中每个任务名称就要对应一套爬虫系统的限制,通用性更强,降低了内存的占用,对软硬件的要求降低,降低了运行和管理成本。

发明内容

本发明提供了一种自定义职责链及后置处理模块的分布式爬虫框架,技术方案如下:

一种自定义职责链及后置处理模块的分布式爬虫框架,包括如下步骤:

第一步,创建各种不同类型的任务,每一个任务对应一个不同的任务名称;

第二步,定义职责链的接口模块,框架能自适应地处理各个接口模块,每一接口模块的输出都与下一接口模块的输入相对应;

第三步,定义后置处理类,后置处理类根据不同的任务名称,处理第一步中已抓取的url对应的内容;

对于第一步中已抓取的url,经过职责链处理后,会产生多条数据,后置处理类是针对处理后的多条数据的自定义处理方法;

第四步,采用多机器、多进程从第四步的队列中抓取多个url,根据任务名称,推送多个不同的url至队列中待用,当任务名称不存在时,则重复该第一步至第三步创建新的任务;

第五步,根据任务名称,得到职责链,分别处理职责链;

第六步,完成多个url的抓取后,根据任务名称,得到后置处理类,执行后置处理类,将已抓取的url进行保存文件或其它处理。

优选的,在上述一种自定义职责链及后置处理模块的分布式爬虫框架中,第一步中创建各种不同类型的任务,每一个任务对应一个不同的任务名称的具体步骤为:为系统配置ui,操作员在ui上创建对应的任务,同时对每个任务进行配置和赋予任务名称,包括:定义职责链和后置处理类。

优选的,在上述一种自定义职责链及后置处理模块的分布式爬虫框架中,第二步中定义职责链的接口模块,框架能自适应地处理各个接口模块,每一接口模块的输出都与下一接口模块的输入相对应的具体步骤为:

首先通过爬虫工具从网站上抓取url;

进一步地,根据任务名称读取职责链;

进一步地,职责链包括多个有序的接口模块;每一接口模块的输出都与下一接口模块的输入相对应,框架根据多个接口模块的顺序依次抓取内容。

优选的,在上述一种自定义职责链及后置处理模块的分布式爬虫框架中,接口模块包括:网页内容获取模块,分类、标题提取模块,价格提取模块,评论提取模块,正文算法提取模块和输出json的格式模块。

优选的,在上述一种自定义职责链及后置处理模块的分布式爬虫框架中,第二步中框架能自适应地处理各个接口模块是指:如果当前模块不够,能够扩展业务代码新增模块,使用框架的业务人员,可以自行实现接口,开发不同的应用。

优选的,在上述一种自定义职责链及后置处理模块的分布式爬虫框架中,第五步中抓取系统根据任务名称,从队列中读取已推送的url,每次获得指定数量的url;框架遍历所有url,得到各个url后,执行职责链,最终得到与url数量相一致的数据。

本发明的有益效果:

本发明的一种自定义职责链及后置处理模块的分布式爬虫框架,是在一个系统中定义多个职责链,每个职责链对应一个任务名称,即克服了现有技术中每个任务名称就要对应一套爬虫系统的限制,通用性更强,降低了内存的占用,对软硬件的要求降低,降低了运行和管理成本。

附图说明

下面结合附图和具体实施方式来详细说明本发明:

图1是一种自定义职责链及后置处理模块的分布式爬虫框架的流程图。

具体实施方式

为了使本发明技术实现的措施、创作特征、达成目的与功效易于明白了解,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1:

第一步,创建各种不同类型的任务,每一个任务对应一个不同的任务名称;

第二步,定义职责链的接口模块,框架能自适应地处理各个接口模块,每一接口模块的输出都与下一接口模块的输入相对应;

第三步,定义后置处理类,后置处理类根据不同的任务名称,处理第一步中已抓取的url对应的内容;

对于第一步中已抓取的url,经过职责链处理后,会产生多条数据,后置处理类是针对处理后的多条数据的自定义处理方法;

第四步,采用多机器、多进程从第四步的队列中抓取多个url,根据任务名称,推送多个不同的url至队列中待用,当任务名称不存在时,则重复该第一步至第三步创建新的任务;

第五步,根据任务名称,得到职责链,分别处理职责链;

第六步,完成多个url的抓取后,根据任务名称,得到后置处理类,执行后置处理类,将已抓取的url进行保存文件或其它处理。

实施例2:

图1是一种自定义职责链及后置处理模块的分布式爬虫框架的流程图。

如图1所示,一种自定义职责链及后置处理模块的分布式爬虫框架,包括如下步骤:

第一步,创建各种不同类型的任务,每一个任务对应一个不同的任务名称;如“京东商品爬虫”、“汽车图片下载”、“新闻提取”等多个任务;

为系统配置ui,操作员在ui上创建对应的任务,同时对每个任务进行配置和赋予任务名称,包括:定义职责链和后置处理类;

第二步,定义职责链的接口模块,框架能自适应地处理各个接口模块,每一接口模块的输出都与下一接口模块的输入相对应;

首先通过爬虫工具从网站上抓取url;

进一步地,根据任务名称读取职责链;

进一步地,职责链包括多个有序的接口模块;每一接口模块的输出都与下一接口模块的输入相对应,框架根据多个接口模块的顺序依次抓取内容;比如:“京东商品抓取”,可由“抓取html模块”、“京东结构化抓取模块”两部分组成,上一模块的输出会作为下一模块的输入。在“京东商品抓取”案例中,首先执行“抓取html模块”,获得输入url的html代码,进而执行“京东结构化抓取模块”,从html代码中,抽取出需要的内容,如“标题”、“价格”等内容。框架构默认包含一标准模块,业务模块可由业务方提供扩充;

第三步,定义后置处理类,后置处理类根据不同的任务名称,处理第一步中已抓取的url对应的内容;如:保存文件、数据库及推送队列、接口等;

对于第一步中已抓取的url,经过职责链处理后,会产生多条数据,后置处理类是针对处理后的多条数据的自定义处理方法;通常可包含“json文件保存”、“数据库保存”等后置处理。与职责链一致,后置处理类亦可采用业务扩展模式,由业务方提供扩展。

第四步,采用多机器、多进程从第四步的队列中抓取多个url,根据任务名称,推送多个不同的url至队列中待用,当任务名称不存在时,则重复该第一步至第三步创建新的任务;

第五步,根据任务名称,得到职责链,分别处理职责链;

抓取系统根据任务名称,从队列中读取已推送的url,每次获得指定数量的url;如100个。框架遍历所有url,得到各个url后,执行职责链,最终得到与url数量相一致的数据;最终会得到100条数据;抓取系统对于各个分布式结点是一致对待的,是透明的;

第六步,完成多个url的抓取后,根据任务名称,得到后置处理类,执行后置处理类,将已抓取的url进行保存文件或其它处理。

以抓取京东商品、当当评论、qq网上的新闻正文3项内容为例,对本发明进行具体说明:

现有技术:以上三种抓取分别属于商品、评论和正文的抓取,类别不同,通常的做法是写三套应用程序,对应于三种业务抓取,对硬件和软件的要求很高,运行困难,通用性差。

首先,针对当前技术爬虫应用的处理情形进行描述:爬虫根据任务进行分类,包括新闻提取类、图片抓取类和商品抓取类等大任务;每类大任务下方会对应的分为若干个子类别,例如:商品抓取类分为针对具体网店如京东、一号店、国美等等的抓取。

现有技术的处理方法:(1)抽象程度高的网站,一类大任务配制一套爬虫程序;

(2)抽象程度低的网站,每个子类别任务对应设置一套爬虫程序。这是因为各个大类的爬虫业务差异性迵然不同,无法做成一套爬虫系统,因此,必然存在多套爬虫系统;而各个小类,例如针对京东的不同商品抓取,由于都属于商品抓取,故存在相通之处,能够做成一套爬虫系统。

本发明的做法是:

准备阶段:将服务器运行起来;

队列准备:由其它程序从其它来源推送url至队列中;

首先,读取队列,一次性读取若干条url数据;

进一步地,遍历执行多个url,得到这条url对应的key/value;

进一步地,分析这条url对应的网站;

进一步地,读取这条url对应的职责链;

进一步地,执行每条职责链对应的模块;得到部分结果或上下文暂存结果;

进一步地,直至最后一个模块执行完毕,得到最终结果;

进一步地,执行所有取到的url,即得到多条数据结果。直至一次性取的url处理完毕。

进一步地,将多条处理结果,调用后置处理类,将多条结果得到存储;例如:保存为json文件。

具体为:第一步,对应于三种类别,分别抽象成三种职责链;

京东商品的职责链为:网页内容获取->“分类,标题”的提取->价格的提取->输出成json的格式商品;

当当评论的职责链:网页内容获取—>评论的提取->输出成json的格式评论;

qq网上的新闻正文的职责链:网页内容获取->正文算法提取->输出成json的格式新闻正文;

进一步地,上述3个职责链在系统中分别抽象成一个接口,框架根据定义的次序,按照顺序依次执行。因此,只需要扩展动态的接口实现,而不需要重新开发一套应用。

第二步:将得到的3条json格式的结果,调用后置处理类,后置处理类根据不同的任务名称,处理第一步中已抓取的url对应的内容,将结果保成文件。

例如:抓取汽车信息:易车网;正文提取:qq新闻;图片抓取:安居客房源图片;

这么多大类、小类的任务混杂在一起,现有技术的做法是至少定义3类爬虫予以处理。本发明在爬虫框架中,只需实施一套通用爬虫,定义不同的职责链即可以完成;对应配置如下:

汽车信息:

职责链:页面html获取,汽车网站键值定义分析;后置处理:json保存文件;

正文提取:

职责链:页面html获取,正文提取算法;后置处理:json保存文件

图片抓取:

职责链:图片二进制流保存;后置处理:保存图片至文件中。

综上,所有的任务,都可以化解成多步,无需开发多套爬虫系统,通用性更强。

一个真实的使用爬虫框架执行的抓取案例配置信息,包含多家电商网站商品的处理。

(1)以京东为例,

首先,设置职责链,"chains":"com.zamplus.crawler.module.CrawlerModule,com.zamplus.crawler.customer.JdPriceModule,com.zamplus.crawler.module.CommonParserModule,com.zamplus.crawler.module.BasicInfoModule";

进一步地,输入一个京东的url后,职责链依次执行如下程序:

CrawlerModule—>获取一个url的html代码:"http://item.jd.com/1555985855.html";

JdPriceModule—>获取该url的京东价格"Price":"396.00";

CommonParserModule——>一个通用的解析类,读取面页的html,根据配置信息,解析得到页面的配置键对应的值productId:1555985855;

BasicInfoModule——>从html中得到页面的元素meta对应的信息,主要是获得页面的标题title使用:慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花高档真丝连衣裙气修身显瘦裙子花色XXL;

将上述结果进行整合后得出京东商品输出结果:{"Category":"服饰内衣>女装>连衣裙>慕立(Mulee)>慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花..","MetaKeywords":"慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花高档真丝连衣裙气质修身显瘦裙子花色XXL【图片价格品牌报价】-京东","Price":"396.00","Title":"慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花高档真丝连衣裙气修身显瘦裙子花色XXL","productId":"1555985855","url":"http://item.jd.com/1555985855.html"}]

其它每个多站都对应于不同的处理职责链,处理职责链是依次顺序执行。后续的职责链依赖前期的职责链输出。例如:必须输出html,才能够去分析页面的类别等信息。

1号店的职责链与京东的职责两执行程序相类似,1号店的商品输出结果为:{"Category":"所有分类>美容护理、洗发、沐浴>面部护肤>唇部护理>Nivea/妮维雅>Nivea妮维雅润唇膏修护型4.8g","MetaKeywords":"Nivea妮维雅润唇膏修护型4.8g【品牌功效评论正品】-1号店","Price":"19.0","Title":"Nivea妮维雅润唇膏修护型4.8g","productId":"1079938","url"}。

(2)以淘车网为例,提取汽车信息:

职责链:页面html获取,汽车网站键值定义分析;后置处理:json保存文件;

首先,设置职责链,"chains":"com.zamplus.crawler.module.CrawlerModule,com.zamplus.crawler.module.CommonParserModule,com.zamplus.crawler.module.UrlExtractModule,com.zamplus.crawler.module.BasicInfoModule"};

进一步地,输入一个汽车网页的url后,职责链依次执行如下程序:

CrawlerModule—>获取一个url的html代码:"http://www.taoche.com/buycar/b-Dealer15111611991.html";

taochePriceModule—>获取该url的汽车价格"Price":"¥11.98万";

CommonParserModule——>一个通用的解析类,读取面页的html,根据配置信息,解析得到页面的配置键对应的值productId:b-Dealer15111611991;

BasicInfoModule——>从html中得到页面的元素meta对应的信息,主要是获得页面的标题title使用:"重庆巴南区-迈锐宝2012款2.0L手自一体舒适版";

将上述结果进行整合后得出汽车行业输出结果:{"city":"重庆","crumb":"易车二手车>重庆二手车>重庆二手中型>重庆二手雪佛兰>重庆二手迈锐宝>二手2012款迈锐宝——2.0L手自一体舒适版","info":"","info_type":"old_car","license_date":"4.00万公里","miles":"2012年03月","page_titles":"【重庆巴南区二手迈锐宝】12.0万_深灰色12款2.0L手自一体舒适版_迈锐宝二手车_易车二手车","price":"¥11.98万","product_id":"b-Dealer15111611991","site":"www.taoche.com","title":"重庆巴南区-迈锐宝2012款2.0L手自一体舒适版","url":"http://www.taoche.com/buycar/b-Dealer15111611991.html"}

(3)以汽车之家为例,提取汽车兴趣点信息:

职责链:页面html获取,汽车网站键值定义分析;后置处理:json保存文件;

首先,设置职责链,"chains":"com.zamplus.crawler.module.CrawlerModule,com.zamplus.crawler.module.CommonParserModule,com.zamplus.crawler.module.UrlExtractModule,com.zamplus.crawler.module.BasicInfoModule"};

进一步地,输入一个汽车网页的url后,职责链依次执行如下程序:

CrawlerModule—>获取一个url的html代码:

"http://dealer.autohome.com.cn/2020215/?PvareaID=103706";

CommonParserModule——>一个通用的解析类,读取面页的html,根据配置信息,解析得到页面的配置键对应的值productId:2020215;

BasicInfoModule——>从html中得到页面的元素meta对应的信息,主要是获得页面的标题title使用:"【上海授权经销商】上海宝信实嘉授权经销商地址_电话:13761049040-汽车之家";

将上述结果进行整合后得出汽车行业输出结果:{"address":"上海市金沪路1000号","brand":"GMC","city":"上海","crumb":"当前位置:汽车之家>上海>上海宝信实嘉","info":"{\"id\":\"2020215\",\"source\":\"13\",\"type\":\"2\"}","lat":"31.250217","lon":"121.609572","manufacturer":"GMC","name":"上海宝信实嘉","page_titles":"【上海授权经销商】上海宝信实嘉授权经销商地址_电话:13761049040-汽车之家","product_id":"2020215","site":"dealer.autohome.com.cn","url":"http://dealer.autohome.com.cn/2020215/?PvareaID=103706"}

上述实施例1、2、3在本发明的申请中能够同时进行分析,因为在本发明中可以同时定义多个职责链,命令其进行不同的信息抓取,而在京东、淘车网或者汽车之家的自身网站中,都只具有一种具有固定编程或者模块化的系统,只能完成相对应的一项工作,不能同时完成3项工作,因此,操作复杂,本申请是一种通用的爬充框架,无需区分具体的工作环境,能够根据需求自定义一种或者多种职责链,使其同时完成抓取工作,工作更加快速,适用性更广,占用内存小,节约了编程人员的工作量。

本发明的一种自定义职责链及后置处理模块的分布式爬虫框架,是在一个系统中定义多个职责链,每个职责链对应一个任务名称,克服了现有技术中每个任务名称就要对应一套爬虫系统的限制,通用性更强,降低了内存的占用,对软硬件的要求降低,降低了运行和管理成本。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等同物界定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号