Gecco爬虫框架官网

优采云 发布时间: 2020-06-09 10:24

  

  Gecco是一款用java语言开发的轻量化的易用的网路爬虫。Gecco整合了jsoup、httpclient、fastjson、spring、htmlunit、redission等优秀框架,让您只须要配置一些jquery风格的选择器能够很快的写出一个爬虫。Gecco框架有优秀的可扩展性,框架基于开闭原则进行设计爬虫框架,对更改关掉、对扩充开放。同时Gecco基于非常开放的MIT开源协议,无论你是使用者还是希望共同建立Gecco的开发者,欢迎pull request。如果你喜欢这款爬虫框架请star 或者 fork!

  @Gecco(matchUrl="{user}/{project}", pipelines="consolePipeline")

public class MyGithub implements HtmlBean {

private static final long serialVersionUID = -70687225L;

@RequestParameter("user")

private String user;//url中的{user}值

@RequestParameter("project")

private String project;//url中的{project}值

@Text

@HtmlField(cssPath=".repository-meta-content")

private String title;//抽取页面中的title

@Text

@HtmlField(cssPath=".pagehead-actions li:nth-child(2) .social-count")

private int star;//抽取页面中的star

@Text

@HtmlField(cssPath=".pagehead-actions li:nth-child(3) .social-count")

private int fork;//抽取页面中的fork

@Html

@HtmlField(cssPath=".entry-content")

private String readme;//抽取页面中的readme

public String getReadme() {

return readme;

}

public void setReadme(String readme) {

this.readme = readme;

}

public String getUser() {

return user;

}

public void setUser(String user) {

this.user = user;

}

public String getProject() {

return project;

}

public void setProject(String project) {

this.project = project;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public int getStar() {

return star;

}

public void setStar(int star) {

this.star = star;

}

public int getFork() {

return fork;

}

public void setFork(int fork) {

this.fork = fork;

}

public static void main(String[] args) {

GeccoEngine.create()

//工程的包路径

.classpath("com.geccocrawler.gecco.demo")

//开始抓取的页面地址

.start("")

//开启几个爬虫线程

.thread(1)

//单个爬虫每次抓取完一个请求后的间隔时间

.interval(2000)

//循环抓取

.loop(true)

//使用pc端userAgent

.mobile(false)

//开始运行

.run();

}

}

  DynamicGecco的目的是在不定义SpiderBean的情况下实现爬取规则的运行时配置。其实现原理是采用字节码编程,动态生成SpiderBean,而且通过自定义的GeccoClassLoader实现了抓取规则的热布署。下面是一个简单Demo,更复杂的Demo可以参考com.geccocrawler.gecco.demo.dynamic下的反例。

  下面的代码实现了爬取规则的运行时配置:

  DynamicGecco.html()

.gecco("{user}/{project}", "consolePipeline")

.requestField("request").request().build()

.stringField("user").requestParameter("user").build()

.stringField("project").requestParameter().build()

.stringField("title").csspath(".repository-meta-content").text(false).build()

.intField("star").csspath(".pagehead-actions li:nth-child(2) .social-count").text(false).build()

.intField("fork").csspath(".pagehead-actions li:nth-child(3) .social-count").text().build()

.stringField("contributors").csspath("ul.numbers-summary > li:nth-child(4) > a").href().build()

.register();

//开始抓取

GeccoEngine.create()

.classpath("com.geccocrawler.gecco.demo")

.start("")

.run();

  可以看见爬虫框架,DynamicGecco的方法相比传统的注解形式代码量大大降低,而且太酷的一点是DynamicGecco支持运行时定义和更改规则。

  请遵循开源协议MIT

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线