• 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

  • 相关阅读:
    C#使用CurrentUICulture切换语言
    XmlNode与XmlElement的区别总结
    git 怎样删除远程仓库的最近一次错误提交?
    Kermit,Xmodem,1K-Xmodem,Ymodem,Zmodem传输协议小结
    C#串口通信发送数据
    通过 Chrome 调试运行在 IOS-safari 上的页面
    display:flex不兼容Android、Safari低版本的解决方案 【flex布局】
    jquery获取<div></div>之间的内容.text() 和 .html()区别
    vscode格式化代码无效--可能的解决方法
    git pull出现fatal: unable to access 'https://github.com/XXX/YYY.git'
  • 原文地址:https://www.cnblogs.com/boychen/p/7294364.html
Copyright © 2020-2023  润新知