使用轻量级JAVA 爬虫Gecco工具抓取新闻DEMO

写在前面

最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站
http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象。抓取HTML节点通过像Jquery选择器一样选择节点,非常方便,Gecco代码主要利用注解实现来实现URL匹配,看起来比较简洁美观。

Gecoo GitHub地址
https://github.com/xtuhcy/gecco
Gecoo 作者博客
http://my.oschina.net/u/2336761/blog?fromerr=ZuKKo3fH

添加Maven依赖

        <dependency>
            <groupId>com.geccocrawler</groupId>
            <artifactId>gecco</artifactId>
            <version>1.0.8</version>
        </dependency>

编写抓取列表页面

@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;
}

@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));
    }
}

编写抓取祥情页面


@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;
}
@PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline<ZJNewsDetail> {
    public void process(ZJNewsDetail zjNewsDetail) {
        System.out.println(zjNewsDetail.getTitle()+"  "+zjNewsDetail.getCreateTime());
    }
}

启动主函数


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();
    }
}

抓取结果

这里写图片描述

这里写图片描述

项目完成代码

http://git.oschina.net/whzhaochao/geccoDemo

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值