JAVA 爬虫工具有挺多的,但是Gecco是一个挺轻量方便的工具。
先上项目结构图。
这是一个 JAVASE的 MAVEN 项目,要添加包依赖,其他就四个文件。log4j.properties 加上三个java类。
1、先配置log4j.properties
log4j.rootLogger =error,stdout,D,E
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=vincent_player_debug.log
log4j.appender.D.Append= truelog4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern= %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File=vincent_player_error.log
log4j.appender.E.Append= truelog4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern= %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
2、接下来着手写Blog.java,里面都有注释 不解释
packagecom.cwj.gecco.pojo;importcom.geccocrawler.gecco.annotation.Gecco;importcom.geccocrawler.gecco.annotation.HtmlField;importcom.geccocrawler.gecco.annotation.Request;importcom.geccocrawler.gecco.request.HttpRequest;importcom.geccocrawler.gecco.spider.SpiderBean;/***@authorcwj
* 2017年8月6日
* Blog实体类,运行主函数从这里开始解析
* matchUrl:要抓包的目标地址
* pipelines:跳转到下个pipelines*/@Gecco(matchUrl="http://www.cnblogs.com/boychen/p/7226831.html",pipelines="blogPipelines")public class Blog implementsSpiderBean{/*** 向指定URL发送GET方法的请求*/@RequestprivateHttpRequest request;/*** 抓去这个路径下所有的内容*/@HtmlField(cssPath= "body div#cnblogs_post_body")privateString content;publicHttpRequest getRequest() {returnrequest;
}public voidsetRequest(HttpRequest request) {this.request =request;
}publicString getContent() {returncontent;
}public voidsetContent(String content) {this.content =content;
}
}
3、BlogPipelines.java
packagecom.cwj.gecco.pipelines;importcom.cwj.gecco.pojo.Blog;importcom.geccocrawler.gecco.annotation.PipelineName;importcom.geccocrawler.gecco.pipeline.Pipeline;/***@authorcwj
* 2017年8月6日
* 运行完Blog.java 根据@PipelineName 来这里*/@PipelineName(value="blogPipelines")public class BlogPipelines implements Pipeline{/*** 将抓取到的内容进行处理 这里是打印在控制台*/
public voidprocess(Blog blog) {
System.out.println(blog.getContent());
}
}
4、最后便是在main中调用
packagecom.cwj.gecco.main;importcom.geccocrawler.gecco.GeccoEngine;public classMain {public static voidmain(String[] args) {
GeccoEngine.create()//工程的包路径
.classpath("com.cwj.gecco")//开始抓取的页面地址
.start("http://www.cnblogs.com/boychen/p/7226831.html")//开启几个爬虫线程
.thread(10)//单个爬虫每次抓取完一个请求后的间隔时间
.interval(5)//使用pc端userAgent
.mobile(false)//开始运行
.run();
}
}
5、抓取到内容,日志文件被我删除 有警告
附上源码地址 https://github.com/BeautifulMeet/Gecco