四、GeccoEngine

Gecco如何运行

Gecco的初始化和启动通过GeccoEngine完成,GeccoEngine主要负责初始化配置、开始请求的配置和启动爬虫运行,最基本的启动方法:

GeccoEngine.create()
    .classpath("com.geccocrawler.gecco.demo")
    .start("https://github.com/xtuhcy/gecco")
    .start();

classpath是必填项,指定扫描@Gecco的包路径。start是初始请求地址。start()表示采用非阻塞方式运行爬虫。

GeccoEngine基本配置项

  • loop(true):表示是否循环抓取,默认为false
  • thread(2):表示开启的爬虫线程数量,默认是1,需要注意的是线程数量要小于或者等于start请求的数量
  • interval(2000):表示某个线程在抓取完成一个请求后的间隔时间,单位是毫秒,系统会在左右1秒时间内随机。如果为2000,系统会在1000~3000之间随机选取。
  • mobile(false):表示使用移动端还是pc端的UserAgent。默认为false使用pc端的UserAgent。
  • debug(true):是否开启debug模式,如果开启debug模式,会在控制台输出jsoup元素抽取的日志。
  • pipelineFactory(PipelineFactory):自定义Pipeline工厂类
  • scheduler(Scheduler):自定义请求队列管理器

非阻塞启动和阻塞启动

  • start():非阻塞启动,GeccoEngine会单独启动线程运行,推荐以该方式运行。线程模型如下:

Main Thread-->GeccoEngine Thread-->Spider Thread

  • run():阻塞启动,GeccoEngine在主线程中启动运行,非循环模式GeccoEngine需要等待其他爬虫线程运行完毕后才会退出。线程模型r如下:

Main Thread-->Spider Thread

Gecco如何匹配URL

  • 匹配URL的作用

匹配URL是告知Gecco,这种格式的url对应的网页会被渲染成当前的SpiderBean。

  • matchUrl如何写

完全匹配:@Gecco(matchUrl="https://github.com/"),完全匹配https://github.com/这个url

模糊匹配:@Gecco(matchUrl="https://github.com/{user}/{project}"),会匹配所有类似格式的url,https://github.com/xtuhcy/gecco、https://github.com/xtuhcy/gecco-spring。模糊匹配的{}可以匹配任意非空白字符串但是不包含斜杠(/)

任意匹配:@Gecco,如果你不写matchUrl,任何格式的url都会被匹配,这种方式一般用作通用爬虫,例如:

@Gecco(pipelines="consolePipeline")
public class CommonCrawler implements HtmlBean {

    private static final long serialVersionUID = -8870768223740844229L;

    @Request
    private HttpRequest request;

    @HtmlField(cssPath="body")
    private String body;

    public HttpRequest getRequest() {
        return request;
    }

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

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public static void main(String[] args) {
        GeccoEngine.create()
        .classpath("com.geccocrawler.gecco.demo")
        .start("https://www.baidu.com/")
        .interval(2000)
        .start();
    }
}

gecco

继续阅读此作者的更多文章