JAVA使用Gecco爬虫 抓取网页内容(附Demo)
JAVA 爬虫工具有挺多的,但是Gecco是一个挺轻量方便的工具。
先上项目结构图。
这是一个 JAVASE的 MAVEN 项目,要添加包依赖,其他就四个文件。log4j.properties 加上三个java类。
1、先配置log4j.properties
log4j.rootLogger=INFO,Console,File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
log4j.appender.File = org.apache.log4j.RollingFileAppender
log4j.appender.File.File = logs/ssm.log
log4j.appender.File.MaxFileSize = 10MB
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%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