java爬蟲Gecco工具抓取新聞實(shí)例
最近看到Gecoo爬蟲工具,感覺比較簡單好用,所有寫個DEMO測試一下,抓取網(wǎng)站
http://zj.zjol.com.cn/home.html,主要抓取新聞的標(biāo)題和發(fā)布時間做為抓取測試對象。抓取HTML節(jié)點(diǎn)通過像Jquery選擇器一樣選擇節(jié)點(diǎn),非常方便,Gecco代碼主要利用注解實(shí)現(xiàn)來實(shí)現(xiàn)URL匹配,看起來比較簡潔美觀。
添加Maven依賴
<dependency> <groupId>com.geccocrawler</groupId> <artifactId>gecco</artifactId> <version>1.0.8</version> </dependency>
編寫抓取列表頁面
@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)入祥情頁面抓取 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"; //抓取下一頁 SchedulerContext.into(request.subRequest(nextUrl)); } }
編寫抓取祥情頁面
@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()); } }
啟動主函數(shù)
public class Main { public static void main(String [] rags){ GeccoEngine.create() //工程的包路徑 .classpath("com.zhaochao.gecco.zj") //開始抓取的頁面地址 .start("http://zj.zjol.com.cn/home.html?pageIndex=1&pageSize=100") //開啟幾個爬蟲線程 .thread(10) //單個爬蟲每次抓取完一個請求后的間隔時間 .interval(10) //使用pc端userAgent .mobile(false) //開始運(yùn)行 .run(); } }
抓取結(jié)果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中Map循環(huán)遍歷的五種方法實(shí)現(xiàn)
本文主要介紹了Java中Map循環(huán)遍歷的五種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Java 線程對比(Thread,Runnable,Callable)實(shí)例詳解
這篇文章主要介紹了Java 線程(Thread,Runnable,Callable)實(shí)例詳解的相關(guān)資料,這里對java 線程的三種方法進(jìn)行了對比,需要的朋友可以參考下2016-12-12java中循環(huán)刪除list中元素的方法總結(jié)
下面小編就為大家?guī)硪黄猨ava中循環(huán)刪除list中元素的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解
這篇文章主要介紹了Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08SpringBoot源碼分析之bootstrap.properties文件加載的原理
本文通過訪問看到bootstrap.properties中的信息獲取到了,同時age也被application.properties中的屬性覆蓋掉了。加載順序到底是什么?為什么會覆蓋呢?我們接下來分析下吧2021-12-12