cetty基于事件分發(fā)的爬蟲框架
一個輕量級的基于事件分發(fā)的爬蟲框架。
功能介紹
- 基于完全自定義事件處理機制的爬蟲框架。
- 模塊化的設(shè)計,提供強大的可擴展性。
- 基于HttpClient支持同步和異步數(shù)據(jù)抓取。
- 支持多線程。
- 基于Jsoup頁面解析框架提供強大的網(wǎng)頁解析處理能力。
maven
<dependency> <groupId>com.jibug.cetty</groupId> <artifactId>cetty-core</artifactId> <version>0.1.5</version> </dependency>
快速入門
/**
* 抓取天涯論壇文章列表標題
* 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對象,將我們解析出來的結(jié)果向下一個handler傳遞
Result result = page.getResult();
result.addResults(titles);
//通過fireXXX 方法將本handler 處理的結(jié)果向下傳遞
//本教程直接將結(jié)果傳遞給ConsoleHandler,將結(jié)果直接輸出控制臺
ctx.fireReduce(page);
}
public static void main(String[] args) {
//啟動引導(dǎo)類
Bootstrap.
me().
//使用同步抓取
isAsync(false).
//開啟一個線程
setThreadNum(1).
//抓取入口url
startUrl("http://bbs.tianya.cn/list-333-1.shtml").
//通用請求信息
setPayload(Payload.custom()).
//添加自定處理器
addHandler(new Tianya()).
//添加默認結(jié)果處理器,輸出至控制臺
addHandler(new ConsoleReduceHandler()).
start();
}
}
TODO
- 支持注解方式
- 支持代理池
- 支持Berkeley 內(nèi)存數(shù)據(jù)作為url管理器,提供海量url存儲并提高存取效率
- 支持熱更新
- 支持爬蟲治理
評論
圖片
表情
