Gecco是一款使用java语言开发的简单易用的轻量级网络爬虫。Gecco集成了jsoup、httpclient、fastjson、spring、htmlunit、redission ausgezeichneten框架,让你只需要配置一些jQuery风格的选择器就可以非常快速的编写一个爬虫Gecco框架具有优秀的可扩展性,该框架基于开放和封闭的原则设计,对修改封闭,扩展开放。同时Gecco是基于非常开放的MIT开源协议,无论您是Gecco的用户还是想共同完善Gecco的开发者,欢迎请求pull。如果您喜欢这个爬虫框架,请star或者fork!
< dependency >
< groupId >com.geccocrawler</ groupId >
< artifactId >gecco</ artifactId >
< version >x.x.x</ version >
</ dependency >
httpclient,jsoup,fastjson,reflections,cglib,rhino,log4j,jmxutils,commons-lang3
@ Gecco ( matchUrl = "https://github.com/{user}/{project}" , pipelines = "consolePipeline" )
public class MyGithub implements HtmlBean {
private static final long serialVersionUID = - 7127412585200687225L ;
@ RequestParameter ( "user" )
private String user ;
@ RequestParameter ( "project" )
private String project ;
@ Text
@ HtmlField ( cssPath = ".pagehead-actions li:nth-child(2) .social-count" )
private String star ;
@ Text
@ HtmlField ( cssPath = ".pagehead-actions li:nth-child(3) .social-count" )
private String fork ;
@ Html
@ HtmlField ( cssPath = ".entry-content" )
private String 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 getStar () {
return star ;
}
public void setStar ( String star ) {
this . star = star ;
}
public String getFork () {
return fork ;
}
public void setFork ( String fork ) {
this . fork = fork ;
}
public static void main ( String [] args ) {
GeccoEngine . create ()
. classpath ( "com.geccocrawler.gecco.demo" )
. start ( "https://github.com/xtuhcy/gecco" )
. thread ( 1 )
. interval ( 2000 )
. loop ( true )
. mobile ( false )
. start ();
}
}
DynamicGecco的目的是在不定义SpiderBean的情况下,实现抓取规则的运行时配置。其实原理就是利用字节码编程,动态生成SpiderBean,同时也可以通过自定义GeccoClassLoader来实现规则的热部署下面是一个简单的Demo,更复杂的Demo可以参考下面的例子com.geccocrawler.gecco.demo.dynamic。
下面的代码实现了抓取规则的运行时配置:
DynamicGecco.html()
.gecco("https://github.com/{user}/{project}", "consolePipeline")
.requestField("request").request().build()
.stringField("user").requestParameter("user").build()
.stringField("project").requestParameter().build()
.stringField("star").csspath(".pagehead-actions li:nth-child(2) .social-count").text(false).build()
.stringField("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("https://github.com/xtuhcy/gecco")
.run();
可以看到DynamicGecco方式相比传统的注解方式代码大大减少了,而且很酷的一点就是DynamicGecco支持操作规则的定义和修改。
教您使用 java 爬虫 gecco 抓取 JD 全部商品信息(一)
教您使用 java 爬虫 gecco 抓取 JD 全部商品信息(二)
教您使用 java 爬虫 gecco 抓取 JD 全部商品信息(三)
集成 Htmlunit 下载页面
爬虫的监控点
一个完整的例子,分页处理,结合spring,mysql入库
此处提供了类似工具的列表以及它们的比较方式:
网络归档软件比较
Gecco的发展请大家支持,扫一扫请作者喝杯咖啡~
请遵循MIT开源协议!