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