分享我的開源爬蟲框架

Cetty

一個輕量級的基於事件分發的爬蟲框架。html

An event dispatch crawler framework.java

功能介紹

  • 基於徹底自定義事件處理機制的爬蟲框架。
  • 模塊化的設計,提供強大的可擴展性。
  • 基於HttpClient支持同步和異步數據抓取。
  • 支持多線程。
  • 基於Jsoup頁面解析框架提供強大的網頁解析處理能力。

快速開始

使用Maven

<dependency>
  <groupId>com.jibug.cetty</groupId>
  <artifactId>cetty-core</artifactId>
  <version>0.1.5</version>
</dependency>
複製代碼

幫助

1.詳細文檔:cetty.jibug.com/
2.QQ羣
git


3.bug反饋: issues

讓咱們來寫第一個demo

/** * 抓取天涯論壇文章列表標題 * http://bbs.tianya.cn/list-333-1.shtml * * @author heyingcai */
public class Tianya extends ProcessHandlerAdapter {

    @Override
    public void process(HandlerContext ctx, Page page) {
        //獲取 Document
        Document document = page.getDocument();
        //dom解析
        Elements itemElements = document.
                select("div#bbsdoc>div#bd>div#main>div.mt5>table>tbody").
                get(2).
                select("tr");
        List<String> titles = Lists.newArrayList();
        for (Element item : itemElements) {
            String title = item.select("td.td-title").text();
            titles.add(title);
        }

        //獲取Result對象,將咱們解析出來的結果向下一個handler傳遞
        Result result = page.getResult();
        result.addResults(titles);
        
        //經過fireXXX 方法將本handler 處理的結果向下傳遞
        //本教程直接將結果傳遞給ConsoleHandler,將結果直接輸出控制檯
        ctx.fireReduce(page);
    }

    public static void main(String[] args) {
        //啓動引導類
        Bootstrap.
                me().
                //使用同步抓取
                isAsync(false).
                //開啓一個線程
                setThreadNum(1).
                //抓取入口url
                startUrl("http://bbs.tianya.cn/list-333-1.shtml").       
                //通用請求信息
                setPayload(Payload.custom()).        
                //添加自定處理器
                addHandler(new Tianya()).        
                //添加默認結果處理器,輸出至控制檯
                addHandler(new ConsoleReduceHandler()).        
                start();
    }
}
複製代碼

歷史版本

版本 說明
0.1.0 支持基本爬蟲功能
0.1.5 1.支持xpath 2.修復添加cookie失效問題 3.優化底層邏輯

TODO

  • 支持註解方式
  • 支持代理池
  • 支持Berkeley 內存數據做爲url管理器,提供海量url存儲並提升存取效率
  • 支持熱更新
  • 支持爬蟲治理
相關文章
相關標籤/搜索