SeimiCrawlerJava爬虫框架

联合创作 · 2023-09-29 13:30

SeimiCrawler 是一个敏捷的、独立部署的、支持分布式的 Java 爬虫框架,希望能在最大程度上降低新手开发一个可用性高且性能不差的爬虫系统的门槛,以及提升开发爬虫系统的开发效率。在 SeimiCrawler 的世界里,绝大多数人只需关心去写抓取的业务逻辑就够了,其余的 Seimi 帮你搞定。设计思想上 SeimiCrawler 受 Python 的爬虫框架 Scrapy 启发,同时融合了 Java 语言本身特点与 Spring 的特性,并希望在国内更方便且普遍的使用更有效率的 XPath 解析 HTML,所以 SeimiCrawler 默认的 HTML 解析器是 JsoupXpath (独立扩展项目,非 jsoup 自带),默认解析提取 HTML 数据工作均使用 XPath 来完成(当然,数据处理亦可以自行选择其他解析器)。并结合 SeimiAgent 彻底完美解决复杂动态页面渲染抓取问题。V2.0 版本开始无缝支持 SpringBoot。

原理示例

基本原理

集群原理

快速开始

添加 maven 依赖 (已经同步到中央 maven 库,最新版本参见项目主页):

    cn.wanghaomiao
    SeimiCrawler
    x.x.x

在包 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 urls = doc.sel("//a[@class='titlelnk']/@href");
            logger.info("{}", urls.size());
            for (Object s:urls){
                push(new Request(s.toString(),Basic::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");
    }
}

以上便是一个最简单的爬虫系统开发流程。

更多文档

目前可以参考 demo 工程中的样例,基本包含了主要的特性用法。更为细致的文档移步 SeimiCrawler 主页 中进一步查看。

浏览 1
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报