最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站
http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象。抓取HTML节点通过像Jquery选择器一样选择节点,非常方便,Gecco代码主要利用注解实现来实现URL匹配,看起来比较简洁美观。
添加Maven依赖
1
2
3
4
5
|
< dependency >
< groupId >com.geccocrawler</ groupId >
< artifactId >gecco</ artifactId >
< version >1.0.8</ version >
</ dependency >
|
编写抓取列表页面
1
2
3
4
5
6
7
8
9
10
11
|
@Gecco (matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}" ,pipelines = "zJNewsListPipelines" )
public class ZJNewsGeccoList implements HtmlBean {
@Request
private HttpRequest request;
@RequestParameter
private int pageIndex;
@RequestParameter
private int pageSize;
@HtmlField (cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a" )
private List<HrefBean> newList;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@PipelineName ( "zJNewsListPipelines" )
public class ZJNewsListPipelines implements Pipeline<ZJNewsGeccoList> {
public void process(ZJNewsGeccoList zjNewsGeccoList) {
HttpRequest request=zjNewsGeccoList.getRequest();
for (HrefBean bean:zjNewsGeccoList.getNewList()){
//进入祥情页面抓取
SchedulerContext.into(request.subRequest( "http://zj.zjol.com.cn" +bean.getUrl()));
}
int page=zjNewsGeccoList.getPageIndex()+ 1 ;
String nextUrl = "http://zj.zjol.com.cn/home.html?pageIndex=" +page+ "&pageSize=100" ;
//抓取下一页
SchedulerContext.into(request.subRequest(nextUrl));
}
}
|
编写抓取祥情页面
1
2
3
4
5
6
7
8
9
10
11
|
@Gecco (matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline" )
public class ZJNewsDetail implements HtmlBean {
@Text
@HtmlField (cssPath = "#headline" )
private String title ;
@Text
@HtmlField (cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray" )
private String createTime;
}
|
1
2
3
4
5
6
|
@PipelineName ( "zjNewsDetailPipeline" )
public class ZJNewsDetailPipeline implements Pipeline<ZJNewsDetail> {
public void process(ZJNewsDetail zjNewsDetail) {
System.out.println(zjNewsDetail.getTitle()+ " " +zjNewsDetail.getCreateTime());
}
}
|
启动主函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Main {
public static void main(String [] rags){
GeccoEngine.create()
//工程的包路径
.classpath( "com.zhaochao.gecco.zj" )
//开始抓取的页面地址
.start( "http://zj.zjol.com.cn/home.html?pageIndex=1&pageSize=100" )
//开启几个爬虫线程
.thread( 10 )
//单个爬虫每次抓取完一个请求后的间隔时间
.interval( 10 )
//使用pc端userAgent
.mobile( false )
//开始运行
.run();
}
}
|
抓取结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。