一個敏捷的,分布式的Java爬蟲框架:SeimiCrawler
SeimiCrawler
An agile,powerful,distributed crawler framework.
SeimiCrawler的目標是成為Java世界最好用最實用的爬蟲框架。
簡介
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("http://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("http://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"); } }
以上便是一個最簡單的爬蟲系統開發流程。
更多文檔
目前可以參考demo工程中的樣例,基本包含了主要的特性用法。更為細致的文檔移步SeimiCrawler主頁中進一步查看
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!