高效敏捷的Java爬蟲框架SeimiCrawler示例


SeimiCrawler是一個強大的,高效敏捷的,支持分布式的爬蟲開發框架,希望能在最大程度上降低新手開發一個可用性高且性能不差的爬蟲系統的門檻,以及提升開發爬蟲系統的開發效率。在SeimiCrawler的世界里,絕大多數人只需關心去寫抓取的業務邏輯就夠了,其余的Seimi幫你搞定。設計思想上SeimiCrawler受Python的爬蟲框架Scrapy啟發很大,同時融合了Java語言本身特點與Spring的特性,並希望在國內更方便且普遍的使用更有效率的XPath解析HTML,所以SeimiCrawler默認的HTML解析器是JsoupXpath,默認解析提取HTML數據工作均使用XPath來完成(當然,數據處理亦可以自行選擇其他解析器)。

原理示例

基本原理

SeimiCrawler原理圖

集群原理

SeimiCrawler集群原理圖

快速開始

添加maven依賴(已經同步到中央maven庫):

<dependency>
    <groupId>cn.wanghaomiao</groupId>
    <artifactId>SeimiCrawler</artifactId>
    <version>0.1.0</version>
</dependency>

  

在包crawlers下添加爬蟲規則,例如:

@Crawler(name = "basic")
public class Basic extends BaseSeimiCrawler {
    @Override
    public String[] startUrls() {
        return new String[]{"http://www.cnblogs.com/"};
    }
    @Override
    public void start(Response response) {
        JXDocument doc = response.document();
        try {
            List<Object> urls = doc.sel("//a[@class='titlelnk']/@href");
            logger.info("{}", urls.size());
            for (Object s:urls){
                push(new Request(s.toString(),"getTitle"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void getTitle(Response response){
        JXDocument doc = response.document();
        try {
            logger.info("url:{} {}", response.getUrl(), doc.sel("//h1[@class='postTitle']/a/text()|//a[@id='cb_post_title_url']/text()"));
            //do something
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  

然后隨便某個包下添加啟動Main函數,啟動SeimiCrawler:

public class Boot {
    public static void main(String[] args){
        Seimi s = new Seimi();
        s.start("basic");
    }
}

  

以上便是一個最簡單的爬蟲系統開發流程,很容易上手吧。如果有興趣深入了解,可以先到SeimiCrawler的官方主頁看看,那里也有比較詳細的文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM