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 = true log4j.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 = true log4j.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,里面都有注释 不解释
package com.cwj.gecco.pojo; import com.geccocrawler.gecco.annotation.Gecco; import com.geccocrawler.gecco.annotation.HtmlField; import com.geccocrawler.gecco.annotation.Request; import com.geccocrawler.gecco.request.HttpRequest; import com.geccocrawler.gecco.spider.SpiderBean; /** * @author cwj * 2017年8月6日 * Blog实体类,运行主函数从这里开始解析 * matchUrl:要抓包的目标地址 * pipelines:跳转到下个pipelines */ @Gecco(matchUrl="http://www.cnblogs.com/boychen/p/7226831.html",pipelines="blogPipelines") public class Blog implements SpiderBean{ /** * 向指定URL发送GET方法的请求 */ @Request private HttpRequest request; /** * 抓去这个路径下所有的内容 */ @HtmlField(cssPath = "body div#cnblogs_post_body") private String content; public HttpRequest getRequest() { return request; } public void setRequest(HttpRequest request) { this.request = request; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
3、BlogPipelines.java
package com.cwj.gecco.pipelines; import com.cwj.gecco.pojo.Blog; import com.geccocrawler.gecco.annotation.PipelineName; import com.geccocrawler.gecco.pipeline.Pipeline; /** * @author cwj * 2017年8月6日 * 运行完Blog.java 根据@PipelineName 来这里 */ @PipelineName(value="blogPipelines") public class BlogPipelines implements Pipeline<Blog>{ /** * 将抓取到的内容进行处理 这里是打印在控制台 */ public void process(Blog blog) { System.out.println(blog.getContent()); } }
4、最后便是在main中调用
package com.cwj.gecco.main; import com.geccocrawler.gecco.GeccoEngine; public class Main { public static void main(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
时间: 2024-11-10 15:46:22