这里有新鲜出炉的Java函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
本篇文章主要介绍了JAVA 爬虫Gecco工具抓取新闻实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站
http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象。抓取HTML节点通过像Jquery选择器一样选择节点,非常方便,Gecco代码主要利用注解实现来实现URL匹配,看起来比较简洁美观。
添加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://www.phperz.com/article/17/1205/359601.html