crawler爬虫demo, 基于gecco

来源:互联网 发布:按揭贷款月供怎么算法 编辑:程序博客网 时间:2024/05/28 11:28

今天我们来写一下基于gecco的爬虫例子。

当然还是以"x东"页面为例,链接:https://www.jd.com。

首先我们主要需要gecco包:

       <dependency>
 <groupId>com.geccocrawler</groupId>
   <artifactId>gecco</artifactId>
   <version>1.2.8</version>
</dependency>

好了,我们来不如正题吧!

先创建一个类(CatalogItemModel)有这两个:

       @Text
@HtmlField(cssPath = "a")
private String title;

@Attr("href")
@HtmlField(cssPath = "a")
private String href;

这是指定爬取a链接;

在创建CatalogTopModel类:

       @HtmlField(cssPath ="a.cate_menu_lk")
private List<CatalogItemModel> items;

public List<CatalogItemModel> getItems() {
return items;
}

public void setItems(List<CatalogItemModel> items) {
this.items = items;
}

这里指定到具体class属性了;

接着创建:

@Gecco(matchUrl = { "https://www.jd.com" }, pipelines = { "catalogPipline" }, timeout = 15000)
public class CatalogModel implements HtmlBean {


private static final long serialVersionUID = 1L;


@HtmlField(cssPath = "div.fs_col1 > div.J_cate.cate > ul.JS_navCtn.cate_menu > li.cate_menu_item")
private List<CatalogTopModel> tops;


@HtmlField(cssPath = "div.fs_col1 > div.J_cate.cate > div.JS_popCtn.cate_pop > div#cate_item1.cate_part.clearfix > div.cate_part_col1 > div.cate_detail > dl.cate_detail_item")
private List<CatalogTypeModel> types;


public List<CatalogTopModel> getTops() {
return tops;
}


public void setTops(List<CatalogTopModel> tops) {
this.tops = tops;
}


public List<CatalogTypeModel> getTypes() {
return types;
}


public void setTypes(List<CatalogTypeModel> types) {
this.types = types;
}

}

这儿就是指定具体爬取路径,层级关系;

这个类:

@PipelineName("catalogPipline")
public class CatalogPipline implements Pipeline<CatalogModel> {


@Override
public void process(CatalogModel bean) {
System.out.println("*************************一***************************");
List<CatalogTopModel> tops = bean.getTops();
for (CatalogTopModel top : tops) {
for (CatalogItemModel item : top.getItems()) {
System.out.print(item.getTitle() + "|");
}
System.out.println();
}

System.out.println("*************************二***************************");
List<CatalogTypeModel> types = bean.getTypes();
for (CatalogTypeModel type : types) {
System.out.println(type.getDt().getTitle());
}
}

}

这儿就是处理页面上每个a链接相隔的“|”符合,我们不单单是爬取内容,也要有对应的格式;

这是最后一个类了:

public class CatalogTopModel implements HtmlBean {


private static final long serialVersionUID = 1L;

@HtmlField(cssPath ="a.cate_menu_lk")
private List<CatalogItemModel> items;

public List<CatalogItemModel> getItems() {
return items;
}
public void setItems(List<CatalogItemModel> items) {
this.items = items;
}

}

这儿我就不重复说了;

最后我们来写一个Start测试类:

public class Start {

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

ok,启动爬取成功,爬取结果

*************************一***************************
家用电器|
手机|运营商|数码|
电脑|办公|
家居|家具|家装|厨具|
男装|女装|童装|内衣|
美妆个护|宠物|
女鞋|箱包|钟表|珠宝|
男鞋|运动|户外|
汽车|汽车用品|
母婴|玩具乐器|
食品|酒类|生鲜|特产|
礼品鲜花|农资绿植|
医药保健|计生情趣|
图书|音像|电子书|
机票|酒店|旅游|生活|
理财|众筹|白条|保险|
*************************二***************************

大家可以在Gecco爬虫框架官网学习,http://www.geccocrawler.com/

Gecco爬虫框架官网

Gecco爬虫框架官网

原创粉丝点击