欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java爬蟲(chóng)Gecco工具抓取新聞實(shí)例

 更新時(shí)間:2016年10月28日 11:11:19   作者:趙俠客  
本篇文章主要介紹了JAVA 爬蟲(chóng)Gecco工具抓取新聞實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

最近看到Gecoo爬蟲(chóng)工具,感覺(jué)比較簡(jiǎn)單好用,所有寫(xiě)個(gè)DEMO測(cè)試一下,抓取網(wǎng)站
http://zj.zjol.com.cn/home.html,主要抓取新聞的標(biāo)題和發(fā)布時(shí)間做為抓取測(cè)試對(duì)象。抓取HTML節(jié)點(diǎn)通過(guò)像Jquery選擇器一樣選擇節(jié)點(diǎn),非常方便,Gecco代碼主要利用注解實(shí)現(xiàn)來(lái)實(shí)現(xiàn)URL匹配,看起來(lái)比較簡(jiǎn)潔美觀。

添加Maven依賴(lài)

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

編寫(xiě)抓取列表頁(yè)面

@Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")
public class ZJNewsGeccoList implements HtmlBean {
  @Request
  private HttpRequest request;
  @RequestParameter
  private int pageIndex;
  @RequestParameter
  private int pageSize;
  @HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")
  private List<HrefBean> newList;
}
@PipelineName("zJNewsListPipelines")
public class ZJNewsListPipelines implements Pipeline<ZJNewsGeccoList> {
  public void process(ZJNewsGeccoList zjNewsGeccoList) {
    HttpRequest request=zjNewsGeccoList.getRequest();
    for (HrefBean bean:zjNewsGeccoList.getNewList()){
      //進(jìn)入祥情頁(yè)面抓取
    SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl()));
    }
    int page=zjNewsGeccoList.getPageIndex()+1;
    String nextUrl = "http://zj.zjol.com.cn/home.html?pageIndex="+page+"&pageSize=100";
    //抓取下一頁(yè)
    SchedulerContext.into(request.subRequest(nextUrl));
  }
}

編寫(xiě)抓取祥情頁(yè)面

@Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline")
public class ZJNewsDetail implements HtmlBean {

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

  @Text
  @HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")
  private String createTime;
}

@PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline<ZJNewsDetail> {
  public void process(ZJNewsDetail zjNewsDetail) {
    System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());
  }
}

啟動(dòng)主函數(shù)

public class Main {
  public static void main(String [] rags){
    GeccoEngine.create()
        //工程的包路徑
        .classpath("com.zhaochao.gecco.zj")
        //開(kāi)始抓取的頁(yè)面地址
        .start("http://zj.zjol.com.cn/home.html?pageIndex=1&pageSize=100")
        //開(kāi)啟幾個(gè)爬蟲(chóng)線程
        .thread(10)
        //單個(gè)爬蟲(chóng)每次抓取完一個(gè)請(qǐng)求后的間隔時(shí)間
        .interval(10)
        //使用pc端userAgent
        .mobile(false)
        //開(kāi)始運(yùn)行
        .run();
  }
}

抓取結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中Map循環(huán)遍歷的五種方法實(shí)現(xiàn)

    Java中Map循環(huán)遍歷的五種方法實(shí)現(xiàn)

    本文主要介紹了Java中Map循環(huán)遍歷的五種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java 線程對(duì)比(Thread,Runnable,Callable)實(shí)例詳解

    Java 線程對(duì)比(Thread,Runnable,Callable)實(shí)例詳解

    這篇文章主要介紹了Java 線程(Thread,Runnable,Callable)實(shí)例詳解的相關(guān)資料,這里對(duì)java 線程的三種方法進(jìn)行了對(duì)比,需要的朋友可以參考下
    2016-12-12
  • java中循環(huán)刪除list中元素的方法總結(jié)

    java中循環(huán)刪除list中元素的方法總結(jié)

    下面小編就為大家?guī)?lái)一篇java中循環(huán)刪除list中元素的方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解

    Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解

    這篇文章主要介紹了Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java 中冒泡、二分、快速算法詳解

    java 中冒泡、二分、快速算法詳解

    這篇文章主要介紹了java 中冒泡、二分、快速算法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot源碼分析之bootstrap.properties文件加載的原理

    SpringBoot源碼分析之bootstrap.properties文件加載的原理

    本文通過(guò)訪問(wèn)看到bootstrap.properties中的信息獲取到了,同時(shí)age也被application.properties中的屬性覆蓋掉了。加載順序到底是什么?為什么會(huì)覆蓋呢?我們接下來(lái)分析下吧
    2021-12-12
  • 為何Java8需要引入新的日期與時(shí)間庫(kù)

    為何Java8需要引入新的日期與時(shí)間庫(kù)

    這篇文章主要給大家介紹了關(guān)于Java8為什么需要引入新的日期與時(shí)間庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java移動(dòng)文件夾及其所有子文件與子文件夾

    Java移動(dòng)文件夾及其所有子文件與子文件夾

    這篇文章主要為大家詳細(xì)介紹了Java移動(dòng)文件夾及其所有子文件與子文件夾的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java啟動(dòng)線程的3種方式對(duì)比分析

    java啟動(dòng)線程的3種方式對(duì)比分析

    這篇文章主要為大家對(duì)比分析了java啟動(dòng)線程的3種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java設(shè)計(jì)模式之Iterator模式介紹

    Java設(shè)計(jì)模式之Iterator模式介紹

    所謂Iterator模式,即是Iterator為不同的容器提供一個(gè)統(tǒng)一的訪問(wèn)方式。本文以java中的容器為例,模擬Iterator的原理。需要的朋友可以參考下
    2013-07-07

最新評(píng)論