Cetty
一個輕量級的基於事件分發的爬蟲框架。
An event dispatch crawler framework.
功能介紹
- 基於完全自定義事件處理機制的爬蟲框架。
- 模組化的設計,提供強大的可擴充套件性。
- 基於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群
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儲存並提高存取效率
- 支援熱更新
- 支援爬蟲治理