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的官方主页看看,那里也有比较详细的文档

  • 相关阅读:
    IIS“服务没有及时响应启动或控制请求”错误解决
    CSS Overflow属性详解
    访问二维数组的实例ActionScript
    mailto语法
    IIS重新注册asp.net
    flash 动态文本 html
    C++继承中构造函数、析构函数调用顺序及虚析构函数
    根据指定两个日期计算出这些时间内有多少天是周末 php程序函数代码
    计算一段日期内的周末天数(星期六,星期日总和)(
    计算一段日期内的周末天数(星期六,星期日总和
  • 原文地址:https://www.cnblogs.com/wanghaomiao/p/4954842.html
Copyright © 2011-2022 走看看