Java 通过gecco快速搭建一个爬虫框架

Java gecco 爬虫Demo


Gecco是一款用java语言开发的轻量化的易用的网络爬虫框架。
官网: http://www.geccocrawler.com/

1.导入依赖


            com.geccocrawler
            gecco
            1.0.8

2.创建爬虫类

  • 接口HtmlBean说明该爬虫是一个解析html页面的爬虫(gecco还支持json格式的解析)
  • 注解@Gecco告知该爬虫匹配的url格式(matchUrl)和内容抽取后的bean处理类(pipelines处理类采用管道过滤器模式,可以定义多个处理类)。
import com.geccocrawler.gecco.GeccoEngine;
import com.geccocrawler.gecco.annotation.Gecco;
import com.geccocrawler.gecco.annotation.HtmlField;
import com.geccocrawler.gecco.annotation.Request;
import com.geccocrawler.gecco.annotation.Text;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.spider.HtmlBean;

import java.util.List;

/**
 * @Auther: lianjc
 * @Date: 2018/11/19 0019 09:54
 * @Description:
 */
@Gecco(matchUrl = "https://blog.csdn.net/u013396133/article/details/84255590",pipelines = "testPipelines")
public class Test implements HtmlBean {

    @Request
    private HttpRequest request;


    @Text
    @HtmlField(cssPath = "#mainBox > main > div.blog-content-box > div > div > div.article-title-box > h1")
    private String title;

    @HtmlField(cssPath = "#content_views > p:nth-child(5)")
    private String content;

    @HtmlField(cssPath = "#mainBox > main > div.blog-content-box > article")
    private List contents;


    public List getContents() {
        return contents;
    }

    public void setContents(List contents) {
        this.contents = contents;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    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;
    }
    
    }

2.创建一个Pipelines(通道),用来接收爬来的数据

import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;

/**
 * @Auther: lianjc
 * @Date: 2018/11/22 0022 11:29
 * @Description:
 */
@PipelineName(value="testPipelines")
public class TestPipelines implements Pipeline {
    @Override
    public void process(Test test) {

        System.out.println("获取到的标题:"+test.getTitle());

        System.out.println(test.getContent());

        for (int i = 0; i 

3.main方法测试

public static void main(String[] args) {
        GeccoEngine.create()
                //Gecco搜索的包路径
                .classpath("com.higo.model")
                //开始抓取的页面地址
                .start("https://blog.csdn.net/u013396133/article/details/84255590")
                //开启几个爬虫线程
                .thread(1)
                //单个爬虫每次抓取完一个请求后的间隔时间
                .interval(2000)
                .run();
    }

4.效果图
Java 通过gecco快速搭建一个爬虫框架_第1张图片

5.代码解读

  • 接口HtmlBean说明该爬虫是一个解析html页面的爬虫(gecco还支持json格式的解析)
  • 注解@Gecco告知该爬虫匹配的url格式(matchUrl)和内容抽取后的bean处理类
    (例如:http://www.123.com?id={id}&user={user} ) 定义url的格式通过 @RequestParameter传递参数
  • @Gecco中pipelines属性来定义输出通道可以自己来定义通道也可以输出到控制台
    如:pipelines=“consolePipeline”
  • 注解@RequestParameter可以注入url中的请求参数,如@RequestParameter(“user”)表示匹配url中的{user}
  • 注解@Request 发起一个request请求
  • 注解@Text表示获取@HtmlField抽取出来的元素的text内容
  • 注解@Html表示获取@HtmlField抽取出来的元素的html内容(如果不指定默认为@Html)
  • GeccoEngine表示爬虫引擎,通过create()初始化,通过start()/run()运行。可以配置一些启动参数如:扫描@Gecco注解的包名classpath;开始抓取的url地址star;抓取线程数thread;抓取完一个页面后的间隔时间interval(ms)等

6.注意

  • GeccoEngine.classpath()指定的必须是爬虫类的目录否则会报 can’t match url错误
  • 以上注解都是来自gecoo包的 比如 @Request,@RequestParameter
    7.@HtmlField的cssPath 是什么?
    指定扫描的路径吧,类似于Jquery的选择器
    获取技巧 可以打开浏览器调试台
    Java 通过gecco快速搭建一个爬虫框架_第2张图片
    右键菜单的Copy - Copy selector

你可能感兴趣的:(代码)