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

文档序号:9818311阅读:来源:国知局
至第三步创建新的任务;
[0048]第五步,根据任务名称,得到职责链,分别处理职责链;
[0049]抓取系统根据任务名称,从队列中读取已推送的url,每次获得指定数量的url;如100个。框架遍历所有url,得到各个url后,执行职责链,最终得到与url数量相一致的数据;最终会得到100条数据;抓取系统对于各个分布式结点是一致对待的,是透明的;
[0050]第六步,完成多个url的抓取后,根据任务名称,得到后置处理类,执行后置处理类,将已抓取的url进行保存文件或其它处理。
[0051]以抓取京东商品、当当评论、qq网上的新闻正文3项内容为例,对本发明进行具体说明:
[0052]现有技术:以上三种抓取分别属于商品、评论和正文的抓取,类别不同,通常的做法是写三套应用程序,对应于三种业务抓取,对硬件和软件的要求很高,运行困难,通用性差。
[0053]首先,针对当前技术爬虫应用的处理情形进行描述:爬虫根据任务进行分类,包括新闻提取类、图片抓取类和商品抓取类等大任务;每类大任务下方会对应的分为若干个子类别,例如:商品抓取类分为针对具体网店如京东、一号店、国美等等的抓取。
[0054]现有技术的处理方法:(I)抽象程度高的网站,一类大任务配制一套爬虫程序;
[0055](2)抽象程度低的网站,每个子类别任务对应设置一套爬虫程序。这是因为各个大类的爬虫业务差异性迥然不同,无法做成一套爬虫系统,因此,必然存在多套爬虫系统;而各个小类,例如针对京东的不同商品抓取,由于都属于商品抓取,故存在相通之处,能够做成一套爬虫系统。
[0056]本发明的做法是:
[0057]准备阶段:将服务器运行起来;
[0058]队列准备:由其它程序从其它来源推送url至队列中;
[0059]首先,读取队列,一次性读取若干条url数据;
[0060]进一步地,遍历执行多个url,得到这条url对应的key/value ;
[0061]进一步地,分析这条url对应的网站;
[0062]进一步地,读取这条url对应的职责链;
[0063]进一步地,执行每条职责链对应的模块;得到部分结果或上下文暂存结果;
[0064]进一步地,直至最后一个模块执行完毕,得到最终结果;
[0065]进一步地,执行所有取到的url,即得到多条数据结果。直至一次性取的url处理完毕。
[0066]进一步地,将多条处理结果,调用后置处理类,将多条结果得到存储;例如:保存为json文件。
[0067]具体为:第一步,对应于三种类别,分别抽象成三种职责链;
[0068]京东商品的职责链为:网页内容获取->“分类,标题”的提取->价格的提取->输出成json的格式商品;
[0069]当当评论的职责链:网页内容获取一〉评论的提取_>输出成json的格式评论;
[0070]qq网上的新闻正文的职责链:网页内容获取->正文算法提取->输出成json的格式新闻正文;
[0071]进一步地,上述3个职责链在系统中分别抽象成一个接口,框架根据定义的次序,按照顺序依次执行。因此,只需要扩展动态的接口实现,而不需要重新开发一套应用。
[0072]第二步:将得到的3条json格式的结果,调用后置处理类,后置处理类根据不同的任务名称,处理第一步中已抓取的url对应的内容,将结果保成文件。
[0073]例如:抓取汽车信息:易车网;正文提取:qq新闻;图片抓取:安居客房源图片;
[0074]这么多大类、小类的任务混杂在一起,现有技术的做法是至少定义3类爬虫予以处理。本发明在爬虫框架中,只需实施一套通用爬虫,定义不同的职责链即可以完成;对应配置如下:
[0075]汽车信息:
[0076]职责链:页面html获取,汽车网站键值定义分析;后置处理:json保存文件;
[0077]正文提取:
[0078]职责链:页面html获取,正文提取算法;后置处理:json保存文件
[0079]图片抓取:
[0080]职责链:图片二进制流保存;后置处理:保存图片至文件中。
[0081]综上,所有的任务,都可以化解成多步,无需开发多套爬虫系统,通用性更强。
[0082]—个真实的使用爬虫框架执行的抓取案例配置信息,包含多家电商网站商品的处理。
[0083](I)以京东为例,
[0084]首先,设置职责链,"chains": "com.zamplus.crawler.module.CrawlerModule,com.zamplus.crawler.customer.JdPriceModule,com.zamplus.crawler.module.CommonPars erModule,com.zamplus.crawler.module.BasicInfoModule〃;
[0085]进一步地,输入一个京东的url后,职责链依次执行如下程序:
[0086]CrawlerModule — > 获取一个 url 的 html 代码:"http:/ / item, j d.com/1555985855.html";
[0087]JdPriceModule—〉获取该 url 的京东价格〃 Price〃: 〃396.00";
[0088]CommonParserModule-->一个通用的解析类,读取面页的html,根据配置信息,
解析得到页面的配置键对应的值productld:1555985855;
[0089]BasicInfoModule-->Uhtml中得到页面的元素meta对应的信息,主要是获得页面的标题title使用:慕立/MUlee2015夏季新款女装桑蚕丝连衣裙短袖V领印花高档真丝连衣裙气修身显瘦裙子花色XXL;
[0090]将上述结果进行整合后得出京东商品输出结果:{"Category":〃服饰内衣〉女装〉连衣裙〉慕立(Mulee)〉慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花..〃,〃MetaKeywords":〃慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花高档真丝连衣裙气质修身显瘦裙子花色XXL【图片价格品牌报价】-京东〃,"Price": 〃396.00〃,"Title": 〃慕立/Mulee2015夏季新款女装桑蚕丝连衣裙短袖V领印花高档真丝连衣裙气修身显瘦裙子花色XXL〃,〃productId〃:〃 1555985855〃,〃url〃:"http://item.jd.com/1555985855.html"}]
[0091]其它每个多站都对应于不同的处理职责链,处理职责链是依次顺序执行。后续的职责链依赖前期的职责链输出。例如:必须输出html,才能够去分析页面的类别等信息。
[0092]I号店的职责链与京东的职责两执行程序相类似,I号店的商品输出结果为:{〃Category": 〃所有分类〉美容护理、洗发、沐浴〉面部护肤〉唇部护理〉Nivea/妮维雅〉Nivea妮维雅润唇膏修护型4.8g〃,"MetaKeywords": "Nivea妮维雅润唇膏修护型4.8g【品牌功效评论正品】-1号店〃,印4(^〃:〃19.0〃,〃1'416〃:〃則代&妮维雅润唇膏修护型4.88〃,〃productlcT:〃1079938〃,〃url"}。
[0093](2)以淘车网为例,提取汽车信息:
[0094]职责链:页面html获取,汽车网站键值定义分析;后置处理:json保存文件;
[0095]首先,设置职责链,"chains": "com.zamplus.crawler.module.CrawlerModule,com.zamplus.crawler.module.CommonParserModule ,com.zamplus.crawler.module.UrlExtractM odule ,com.zamplus.crawler.module.BasicInfoModule〃};
[0096]进一步地,输入一个汽车网页的url后,职责链依次执行如下程序:
[0097]CrawlerModule一> 获取一个 url 的html 代码:"http: //www.taoche.com/buy car/b-Dealerl5111611991.html";
[0098]taochePriceModule一> 获取该 url 的汽车价格〃 Price〃: 〃 Y11.98 万";
[00"] CommonParserModule-->一个通用的解析类,读取面页的html,根据配置信息,
解析得到页面的配置键对应的值抑
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1