分享一款支持分布式部署的Java爬虫框架

2018-04-08
  • 2083
  • 1

分享一款支持分布式部署的Java爬虫框架,希望可以最大程度上降低新手开发一个可用且性能高的爬虫门槛,并且可以提高新手的开发效率。对于Seimicrawler,绝大部分人只用关心怎么去抓取业务逻辑就够了,其余seimi帮你搞定。

首先介绍下它的第一个爬虫规则类(crawler),这是开发爬虫最核心的部分了。要想快速开发基本的爬虫,需要注意下面几点:

1、必须继承BaseSeimicCrawler

2、需要添加注解:@Crawler,另外注解的name是可有可无的,假如设置了的话,这个爬虫就按你定义的名字命名,不然就是默认使用创建的类名了。

3、要想被框架扫描到爬虫的话,就必须放到crawler包下面(如:cn.wi.xx.carwler)。

4、最后你需要实现两个最基本的方法:startUrls();    start(Response response)。

 

接下来给大家解释一些这俩个基本方法的意思。如你所想根据方法名就可以看出来,

1、StartUrls这个是爬虫的入口,它的返回值为一个String的数组,存放URL的数组。会被以get的方式默认请求处理,如果在特殊情况下,需要以Post的方式请求处理的话,那么你只需在你的url后面加上##post就可以了

2、Start这个就对于starturl的回调函数。用于返回数据的处理。

 

上面基本的方法已经说明了,接下来说下对于返回数据的处理。也就是start方法接收到的数据怎么处理。

1、首先对于文本数据,seimi默认是使用Xpath来进行数据提取的(我也是习惯用这个语法),可能初学xpath语法时会有一点点时间成本,但是对于带来的开发效率来说就显得都是小事情了。学习的时候可以结合fireBug工具。

2、获取返回数据体response.document();这样就可以拿到JXDocument了。接下来,你可以通过doc.sel("xpath")提取任何你想要的数据了,提取任何数据应该都是一条XPath语句就能搞定了具体语句我就不说了,给一个参考:

doc.sel("//h1[@class='postTitle']/a/text()|//a[@id='cb_post_title_url']/text()"));

获取H1标签且class命名为posttitle的一个超链接文本和idcb_post_title_url的文本。