zoukankan      html  css  js  c++  java
  • 高效敏捷的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的官方主页看看,那里也有比较详细的文档

  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/wanghaomiao/p/4954842.html
Copyright © 2011-2022 走看看