Gecco的简单使用(附demo)该文章仅用于学习,谢谢

Gecco的简单使用(附demo)该文章仅用于学习,谢谢

  • Gecco的Maven的xml引入
    • Gecco的简单代码
        • 1.Frist 第一个,用于锁定需要爬取的代码块,如下面代码的@HtmlField(cssPath)的内容,就是锁定了专属的dl,如下代码的main是爬取开始的地方,可以写在其它类里
        • 2.Frist_type 第二个,表示Frist的拓展,在dl的下面进行细节爬取,这样做可以降低搜索时间和减少重复路径的爬取,简单来说就是将一个页面的html截取出来一个dl块,然后在dl块里进行信息爬取,而不是一直在html里爬取,如下代码
        • 3.Second,一个轮回的最后一个类,用于爬取信息,当然,一个正经的爬虫是不止一个轮回的,还涉及到多个url地址的爬取,本内容将一个url的爬取称为一个轮回,前两个类已经将爬取的目标锁定到了文本@Text上,所以就可以进行爬取了,如下代码:
        • 4.运行结果
      • `友情提示:`当然,如果你觉得这就完了,那你就只能爬取一个url页面里的信息,毕竟你从头到尾只用了一个url,接下来才是gecco真正实用的地方,如何将爬取到的url进行再爬取,这才是关键。下面是同样的Second的demo,我取了第一个url进行爬取,获取出来的url是没有页数的,所以我们需要再页面上点击一下页数1然后得到第一页的url,将url补全,关键性的代码就以下两条,写了这两条就能进行第二次轮回,当然,也得写一个和Frist类似的demo来对url进行绑定,不然会报错的!
      • `注:HrefBean是自带的,不用写,一般用于链接的list,可以直接通过getTitle得到文本信息,getUrl获得url`

观看以下代码,需要了解一些@操作,因此请先看http://www.geccocrawler.com/sysc-5/

Gecco的Maven的xml引入

  <dependencies>
        <dependency>
            <groupId>com.geccocrawler</groupId>
            <artifactId>gecco</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.geccocrawler</groupId>
            <artifactId>gecco-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.geccocrawler</groupId>
            <artifactId>gecco-htmlunit</artifactId>
            <version>1.0.9</version>
        </dependency>
        <dependency>
            <groupId>com.geccocrawler</groupId>
            <artifactId>gecco-redis</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>

Gecco的简单代码

1.Frist 第一个,用于锁定需要爬取的代码块,如下面代码的@HtmlField(cssPath)的内容,就是锁定了专属的dl,如下代码的main是爬取开始的地方,可以写在其它类里

Gecco的简单使用(附demo)该文章仅用于学习,谢谢_第1张图片

package cn.baibai;

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.request.HttpRequest;
import com.geccocrawler.gecco.spider.HtmlBean;
import java.util.List;

@Gecco(matchUrl="https://www.jd.com/allSort.aspx",pipelines = "second")
public class Frist implements HtmlBean {

    @Request
    private HttpRequest request;

    @HtmlField(cssPath = "div.category-items > div:nth-child(1) > div:nth-child(2) > div.mc > div.items > dl")
    private List<Frist_type> icons;
    
    public List<Frist_type> getIcons() { return icons; }

    public void setIcons(List<Frist_type> icons) {
        this.icons = icons;
    }

    public HttpRequest getRequest() {
        return request;
    }

    public void setRequest(HttpRequest request) {
        this.request = request;
    }

    public static void main(String[] args) {
        GeccoEngine.create()
                //Gecco搜索的包路径
                .classpath("cn.baibai")
                //开始抓取的页面地址
                .start("https://www.jd.com/allSort.aspx")
                //开启几个爬虫线程
                .thread(1)
                //单个爬虫每次抓取完一个请求后的间隔时间
                .interval(2000)
                .start();
    }
}

2.Frist_type 第二个,表示Frist的拓展,在dl的下面进行细节爬取,这样做可以降低搜索时间和减少重复路径的爬取,简单来说就是将一个页面的html截取出来一个dl块,然后在dl块里进行信息爬取,而不是一直在html里爬取,如下代码

Gecco的简单使用(附demo)该文章仅用于学习,谢谢_第2张图片

package cn.baibai;

import com.geccocrawler.gecco.annotation.Href;
import com.geccocrawler.gecco.annotation.HtmlField;
import com.geccocrawler.gecco.annotation.Text;
import com.geccocrawler.gecco.spider.HrefBean;
import com.geccocrawler.gecco.spider.HtmlBean;
import java.util.List;

public class Frist_type implements HtmlBean {

    @Text
    @HtmlField(cssPath="dt > a")
    private String parentName;

    @HtmlField(cssPath = "dd > a")
    private List<HrefBean> hrefBeans;

    public String getParentName() {
        return parentName;
    }

    public void setParentName(String parentName) {
        this.parentName = parentName;
    }

    public List<HrefBean> getHrefBeans() {
        return hrefBeans;
    }

    public void setHrefBeans(List<HrefBean> hrefBeans) {
        this.hrefBeans = hrefBeans;
    }

}

3.Second,一个轮回的最后一个类,用于爬取信息,当然,一个正经的爬虫是不止一个轮回的,还涉及到多个url地址的爬取,本内容将一个url的爬取称为一个轮回,前两个类已经将爬取的目标锁定到了文本@Text上,所以就可以进行爬取了,如下代码:

Gecco的简单使用(附demo)该文章仅用于学习,谢谢_第3张图片

package cn.baibai;

import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.scheduler.SchedulerContext;
import com.geccocrawler.gecco.spider.HrefBean;
import java.util.List;

@PipelineName("second")
public class Second implements Pipeline<Frist> {

    @Override
    public void process(Frist frist) {
        List<Frist_type> frist_types = frist.getIcons();
        for (Frist_type fr : frist_types) {
            List<HrefBean> hrefs = fr.getHrefBeans();
            for (HrefBean href:hrefs) {
                System.out.println(href.getUrl());
                System.out.println(href.getTitle());
            }
        }
    }
}

4.运行结果

Gecco的简单使用(附demo)该文章仅用于学习,谢谢_第4张图片

友情提示:当然,如果你觉得这就完了,那你就只能爬取一个url页面里的信息,毕竟你从头到尾只用了一个url,接下来才是gecco真正实用的地方,如何将爬取到的url进行再爬取,这才是关键。下面是同样的Second的demo,我取了第一个url进行爬取,获取出来的url是没有页数的,所以我们需要再页面上点击一下页数1然后得到第一页的url,将url补全,关键性的代码就以下两条,写了这两条就能进行第二次轮回,当然,也得写一个和Frist类似的demo来对url进行绑定,不然会报错的!

HttpRequest currRequest = frist.getRequest(); SchedulerContext.into(currRequest.subRequest(href));

package cn.baibai;

import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.scheduler.SchedulerContext;
import com.geccocrawler.gecco.spider.HrefBean;

import java.io.*;
import java.util.List;
@PipelineName("second")
public class Second implements Pipeline<Frist> {

    @Override
    public void process(Frist frist) {
        List<Frist_type> frist_types = frist.getIcons();
        for (Frist_type fr : frist_types) {
            List<HrefBean> hrefs = fr.getHrefBeans();
            String href = hrefs.get(0).getUrl() + "&page=1&sort=sort_rank_asc&trans=1&JL=6_0_0&ms=10";
            System.out.println("******" + href);
            HttpRequest currRequest = frist.getRequest();
            SchedulerContext.into(currRequest.subRequest(href));
            break;
        }
    }
}

Gecco的简单使用(附demo)该文章仅用于学习,谢谢_第5张图片

注:HrefBean是自带的,不用写,一般用于链接的list,可以直接通过getTitle得到文本信息,getUrl获得url

你可能感兴趣的:(Gecco,爬虫,java)