Frontera 概览

Frontera 是 crawl frontier 的实现,用于在从网络下载之前累积URL /链接的网络爬虫组件。 Frontera的主要特征:

  • 面向在线处理,
  • 分布式爬虫和后端架构,
  • 可定制抓取策略,
  • Scrapy易于集成,
  • 集成 SQLAlchemy 支持关系型数据库(Mysql, PostgreSQL, sqlite 等等), 集成 HBase 非常好得支持键值对数据库,
  • 使用 ZeroMQ and Kafka 为分布式爬虫实现消息总线,
  • 使用 Graph Manager 创建伪站点地图和模拟抓取,进行精确抓取逻辑调优。
  • 透明的传输层概念(message bus)和通信协议,
  • 纯 Python 实现 。
  • 支持 Python 3 。

使用案例

下面是一些 crawl frontier 适用的案例:

  • 与爬虫的 URL 排序/排队隔离(例如,需要远端服务器管理排序/排队的分布式爬虫集群),
  • 需要存储 URL 的元信息(在一些地方验证它的内容),
  • 需要高级的 URL 排序逻辑,但在爬虫或者抓取器中很难维护。

一次抓取,少量网站

这种情况下使用单进程可能是最好的选择。 Frontier 提供以下现成的优先级模型:

  • FIFO,
  • LIFO,
  • 广度优先 (BFS),
  • 深度优先 (DFS),
  • 基于提供的得分,从 0.0 映射到 1.0。

如果网站很大,抓取所有网页太浪费, Frontera 可以控制爬虫抓取最重要的网页。

分布式抓取, 少量网站

如果考虑提高抓取速度可以使用分布式爬虫模式。在这种模式下,Frontera 为爬虫进程分发任务,并且只有一个后端实例。请求任务通过你选择的 message bus 进行分发,通过自定义分区调整任务分发策略。默认情况下请求任务是随机分发给爬虫的,抓取速度可以在爬虫中设置。

也考虑一下代理服务,比如 Crawlera

重新抓取

有一组网站,并且需要以及时(或其他)方式重新抓取它们。Frontera 提供了简单的重新抓取后端,根据设置的时间间隔定期抓取已经抓取的网页。这个后端使用关系系数据库持久化数据,并可以应用在单进程模式或者分布式爬虫模式中。

看门狗案例 - 当需要通知文档变化时,也可以使用这样的后端和少量的自定义。

广度抓取

这种使用案例要求完全的分布式:爬虫和后端都是分布式。除了运行 spiders,还应该运行 strategy worker (s) 和 db worker (s),这取决于选择的分区策略。

Frontera可用于与大规模网络抓取相关的一系列广泛任务:

  • 广泛的网页抓取,任意数量的网站和页面(我们在45M文档卷和100K网站上做过测试),

  • 以主机为中心的抓取:当您有超过100个网站时,

  • 聚焦抓取:

    • 主题:您搜索关于某个预定义主题的页面,
    • PageRank,HITS或其他链接图算法指导。

下面是一些真实世界的问题:

  • 抓取网络中的内容检索构建搜索引擎。
  • 网络图的各种研究工作:收集链接,统计,图结构,跟踪域名计数等。
  • 更普遍的集中抓取任务:比如,您搜索的是大中心的网页,并且频繁更改时间。