V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tikazyq
V2EX  ›  程序员

分布式爬虫管理平台 Crawlab 专业版新功能介绍: 结果数据集成

  •  
  •   tikazyq ·
    tikazyq · 2020-07-05 17:15:30 +08:00 · 1344 次点击
    这是一个创建于 1612 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    Crawlab 是一个基于 Golang 的分布式爬虫管理平台,旨在帮助爬虫工程师和开发人员轻松管理一切爬虫。Crawlab 创建之初,就利用 Shell 执行原理使其能够执行理论上任何编程语言开发的爬虫,以及管理任何爬虫框架。自 2019 年 3 月份发布第一个版本,Crawlab 迭代发展了一年多,成为了最受欢迎的爬虫管理平台。在产品不断变得完善的同时,开发组也意识到有必要为企业量身打造一个稳定性更高、更灵活、更实用的版本。

    专业版

    Crawlab 专业版 (Crawlab Pro) 是针对专业用户以及企业量身打造的。它的稳定性更高,相较于 Crawlab 社区版功能更强大。专业版在底层特别是数据库层面做了大量的优化,保证爬虫任务能够稳定而高效的运行并抓取数据。此外,专业版相较于社区版有很多强大的专属功能,例如节点、数据库监控功能,SQL 数据库 (MySQL 、Postgres) 集成等等。在未来,我们将支持更加高级的可配置爬虫。

    结果数据源集成

    Crawlab 专业版首次发布的版本中( v0.1.0 ),我们支持了除 MongoDB 以外的其他数据源,包括 MySQL 和 Postgres 数据库。在最近的 Crawlab 专业版更新中( v0.1.1 ),我们加入 Kafka 和 ElasticSearch 的集成,增强了结果储存格式的多样化,满足了以 Kafka 、ElasticSearch 作为主要结果储存形式的用户。

    因此,Crawlab 专业版现在可以集成大部分数据源,包括 MongoDB 、MySQL 、Postgres 、Kafka 、ElasticSearch 。当然,我们未来还将集成更多的数据源,例如 SQL Server 、Cassandra 、HBase 等等。

    用户可以在 Crawlab 专业版上运行爬虫,将数据抓取下来,并通过调用 Crawlab SDK 来发送结果到指定的数据源中(如下图所示)。

    调用 Crawlab SDK 的方式非常简单,下面是一个 Scrapy Pipeline 中发送结果数据的例子。只需要调用 save_item 这一个方法即可完成结果的保存。您不需要单独指定数据源的连接地址、端口、用户名、密码等等,Crawlab SDK 会帮您轻松完成结果数据集成。

    from crawlab import save_item
    
    class ExamplePipeline(object):
        def process_item(self, item, spider):
            save_item(item) # 只需要调用这一句就可以了
            return item
    

    集成成功后,您可以在 Crawlab 的 Web 界面上看到抓取到的结果数据(如下图)。

    Kafka 集成

    Kafka 是由 Apache 软件基金会开发的一个开源流处理平台。Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。简单来说,可以将 Kafka 理解为一个分布式消息队列。

    为什么我们会在爬虫结果储存中用到 Kafka ?这一般是高并发场景下需要考虑的情况,方便在大吞吐量抓取结果处理情况下,做限流处理,防止数据库被分布式爬虫集群 DDoS ( Distributed Deny of Service )。对于大型爬虫系统来说,一般在单位时间内抓取的结果数量很大,而储存结果的数据库(例如 MongoDB 、MySQL 、HBase )的写入能力是有限的。如果抓取结果吞吐量过大,可能会造成数据库无法正常入库结果数据。这时数据库的负载可能过大,严重影响读取和写入性能,甚至造成数据库宕机。

    为了解决这个问题,我们可以使用 Kafka 这样的流处理系统,在入库端部署一个或多个消费者( Consumer )作为缓冲,控制写入速度,从而避免数据库负载过高的情况。这就相当于在园区大门检票的排队区域一样。当访客过多时,检票员或者检票机器无法处理这么多的访客,就先让大家进排队区域等待检票,这样就避免了人们蜂拥而至,挤垮大门,造成踩踏等严重结果。

    而用 Crawlab 集成 Kafka 也很简单。步骤如下:

    1. 在 “设置” -> “数据源” 中创建新的数据源,选择 Kafka,输入目标数据库的 Host 、Port 、Topic 、用户名、密码等信息;
    2. 在 “爬虫详情“ 页面,选择之前创建的数据源;
    3. 保证爬虫的脚本是用 Crawlab SDK 的 save_item 保存结果数据;
    4. 运行爬虫任务;
    5. 在 “爬虫详情” -> “结果“ 中查看结果数据。

    ElasticSearch 集成

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。简而言之,ElasticSearch 是针对于搜索引擎的数据库。

    很多时候,我们都希望将爬虫的结果储存在数据库中,提供给搜索引擎作为原始数据。例如,像 Google 、Baidu 这样的搜索引擎就是利用大规模爬虫抓取了网页之后通过 PageRank 算法赋予页面权重,然后为前端提供搜索结果。

    以下是用 Crawlab 集成 ElasticSearch 的步骤:

    1. 在 “设置” -> “数据源” 中创建新的数据源,选择 ElasticSearch,输入目标数据库的 Host 、Port 、Index 、用户名、密码等信息;
    2. 在 “爬虫详情“ 页面,选择之前创建的数据源;
    3. 保证爬虫的脚本是用 Crawlab SDK 的 save_item 保存结果数据;
    4. 运行爬虫任务;
    5. 在 “爬虫详情” -> “结果“ 中查看结果数据。

    总结

    Crawlab 专业版的结果数据集成功能让用户可以非常方便的将爬虫结果储存到相应的结果数据源,例如 MySQL 、Kafka 、ElasticSearch 等。Crawlab SDK 在背后做了很多事情,让用户只需要调用 save_item 即可集成结果数据,不仅能储存结果数据到数据库,还能在界面中浏览。后面 Crawlab 开发组将加入更多的数据源,让用户能集成更多的数据库。

    如果您觉得 Crawlab 对您有帮助,请加 tikazyq1 微信咨询,我们将拉您入交流群。

    参考

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:03 · PVG 05:03 · LAX 13:03 · JFK 16:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.