crawlab is a free, open source data extraction & web scraping project written in Go and released under BSD-3-Clause. It has 12,273 GitHub stars, 1,890 forks and 166 open issues, and was last pushed 7 months ago. On this registry it ranks #17 of 45 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 2 stars over the last 3 tracked days.

What is crawlab?

Crawlab is a BSD-3-Clause licensed, Go-based distributed web crawler admin platform that manages spiders regardless of the language or framework they are written in, built for teams that run many crawlers and need one place to schedule, monitor, and inspect them.

What it is

Crawlab is a distributed web crawler management platform written in Go. It sits in the Data & Analytics / Data Extraction & Web Scraping category and acts as an admin layer above crawler code rather than as a crawler framework itself. The README states that it supports various languages, including Python, NodeJS, Go, Java and PHP, and various web crawler frameworks, including Scrapy, Puppeteer and Selenium. Its architecture consists of a master node, worker nodes, SeaweedFS as a distributed file system, and a MongoDB database. A web frontend talks to the master node, which communicates with the rest of the components.

The concrete problem it solves is fragmented crawler operations. Without a platform of this kind, spiders written in different languages and frameworks end up with separate scheduling, separate logs, separate file storage and separate dashboards. Crawlab puts those under a single administrative interface that covers the Node List, Spider List, Spider Overview, Spider Files, Task Log, Task Results and Cron Job views. For Scrapy deployments specifically, that role is often filled by a Scrapyd dashboard, which the project's own topic list reflects through the scrapyd-ui tag. The project offers a hosted demo at demo.crawlab.cn and documentation at docs.crawlab.cn.

Key capabilities

  • Runs spiders written in Python, NodeJS, Go, Java and PHP, and integrates with the Scrapy, Puppeteer and Selenium frameworks.
  • Distributes work across a master node and multiple worker nodes, configured through the environment variables CRAWLAB_NODE_MASTER, CRAWLAB_GRPC_ADDRESS and CRAWLAB_FS_FILER_URL.
  • Stores spider files on SeaweedFS, a distributed file system, so code is shared across nodes rather than copied by hand.
  • Persists crawler results and metadata in MongoDB, configured through CRAWLAB_MONGO_HOST.
  • Provides a browser admin UI on port 8080 with spider lists, node lists, task logs, task results and spider file browsing.
  • Schedules recurring crawls through Cron Job definitions managed in the same interface.
  • Ships as the crawlabteam/crawlab:latest Docker image, licensed under BSD-3-Clause.

Who uses it and how

  • Teams that maintain spiders in more than one language or framework and want a single control plane instead of one dashboard per stack.
  • Operators who deploy the master node plus one or more workers alongside MongoDB, as shown in the README's sample compose file with crawlab_example_master, crawlab_example_worker01, crawlab_example_worker02 and crawlab_example_mongo.
  • Developers who want a fast local trial, using the examples/docker/basic directory from crawlab-team/examples to bring up a full stack on one machine.
  • Operations staff responsible for scheduled scraping jobs, who use the Cron Job and Task Log screens to confirm runs and inspect output.
  • Evaluators who prefer to try the hosted demo before committing to a self-hosted installation.

Getting started

Clone https://github.com/crawlab-team/examples, change into examples/docker/basic and run docker-compose up -d, which starts the master, workers and MongoDB without requiring any database configuration. The same stack can be assembled by hand from a docker-compose.yml using the crawlabteam/crawlab:latest and mongo:4.2 images, then reached at http://localhost:8080.

How it compares

No list of paid products that Crawlab replaces is provided in the available facts, so the honest comparison is with the tools named alongside it: Scrapy, Puppeteer, Selenium and the Scrapyd UI convention captured by the scrapyd-ui topic. Those are crawler frameworks or single-framework dashboards, while Crawlab is positioned as the management platform spanning all of them, which is the distinction its tagline draws when it claims spider management regardless of languages and frameworks. Anyone assessing it should treat the framework comparison section in its README as the authoritative source rather than an outside summary.

When to use it — and when not to

A self-hoster must operate MongoDB, a SeaweedFS distributed file system, a master node and at least one worker node, so running Crawlab means running a multi-service stack rather than a single binary. It is a poor fit for someone with one small spider who does not want to maintain a database and a distributed file system, and the 166 open issues suggest that questions and gaps accumulate faster than the project closes them. There is no evidence of an unclear licence or an abandoned repository, since the licence is BSD-3-Clause and the last push is recent, but the README excerpt available here is truncated, so capabilities beyond architecture, installation and the UI screens should be verified against the full documentation.

project readme (upstream, from github) — read inline

Crawlab

中文 | English

Installation | Run | Screenshot | Architecture | Integration | Compare | Community & Sponsorship | CHANGELOG | Disclaimer

Golang-based distributed web crawler management platform, supporting various languages including Python, NodeJS, Go, Java, PHP and various web crawler frameworks including Scrapy, Puppeteer, Selenium.

Demo | Documentation

Installation

You can follow the installation guide.

Quick Start

Please open the command line prompt and execute the command below. Make sure you have installed docker-compose in advance.

git clone https://github.com/crawlab-team/examples
cd examples/docker/basic
docker-compose up -d

Next, you can look into the docker-compose.yml (with detailed config params) and the Documentation for further information.

Run

Docker

Please use docker-compose to one-click to start up. By doing so, you don't even have to configure MongoDB database. Create a file named docker-compose.yml and input the code below.

version: '3.3'
services:
  master: 
    image: crawlabteam/crawlab:latest
    container_name: crawlab_example_master
    environment:
      CRAWLAB_NODE_MASTER: "Y"
      CRAWLAB_MONGO_HOST: "mongo"
    volumes:
      - "./.crawlab/master:/root/.crawlab"
    ports:    
      - "8080:8080"
    depends_on:
      - mongo

  worker01: 
    image: crawlabteam/crawlab:latest
    container_name: crawlab_example_worker01
    environment:
      CRAWLAB_NODE_MASTER: "N"
      CRAWLAB_GRPC_ADDRESS: "master"
      CRAWLAB_FS_FILER_URL: "http://master:8080/api/filer"
    volumes:
      - "./.crawlab/worker01:/root/.crawlab"
    depends_on:
      - master

  worker02: 
    image: crawlabteam/crawlab:latest
    container_name: crawlab_example_worker02
    environment:
      CRAWLAB_NODE_MASTER: "N"
      CRAWLAB_GRPC_ADDRESS: "master"
      CRAWLAB_FS_FILER_URL: "http://master:8080/api/filer"
    volumes:
      - "./.crawlab/worker02:/root/.crawlab"
    depends_on:
      - master

  mongo:
    image: mongo:4.2
    container_name: crawlab_example_mongo
    restart: always

Then execute the command below, and Crawlab Master and Worker Nodes + MongoDB will start up. Open the browser and enter http://localhost:8080 to see the UI interface.

docker-compose up -d

For Docker Deployment details, please refer to relevant documentation.

Screenshot

Login

Home Page

Node List

Spider List

Spider Overview

Spider Files

Task Log

Task Results

Cron Job

Architecture

The architecture of Crawlab is consisted of a master node, worker nodes, SeaweedFS (a distributed file system) and MongoDB database.

The frontend app interacts with the master node, which communicates with other components such as MongoDB, SeaweedFS and worker nodes. Master node and worker nodes communicate with each other via gRPC (a RPC framework). Tasks are scheduled by the task scheduler module in the master node, and received by the task handler module in worker nodes, which executes these tasks in task runners. Task runners are actually processes running spider or crawler programs, and can also send data through gRPC (integrated in SDK) to other data sources, e.g. MongoDB.

Master Node

The Master Node is the core of the Crawlab architecture. It is the center control system of Crawlab.

The Master Node provides below services:

  1. Task Scheduling;
  2. Worker Node Management and Communication;
  3. Spider Deployment;
  4. Frontend and API Services;
  5. Task Execution (you can regard the Master Node as a Worker Node)

The Master Node communicates with the frontend app, and send crawling tasks to Worker Nodes. In the mean time, the Master Node uploads (deploys) spiders to the distributed file system SeaweedFS, for synchronization by worker nodes.

Worker Node

The main functionality of the Worker Nodes is to execute crawling tasks and store results and logs, and communicate with the Master Node through gRPC. By increasing the number of Worker Nodes, Crawlab can scale horizontally, and different crawling tasks can be assigned to different nodes to execute.

MongoDB

MongoDB is the operational database of Crawlab. It stores data of nodes, spiders, tasks, schedules, etc. Task queue is also stored in MongoDB.

SeaweedFS

SeaweedFS is an open source distributed file system authored by Chris Lu. It can robustly store and share files across a distributed system. In Crawlab, SeaweedFS mainly plays the role as file synchronization system and the place where task log files are stored.

Frontend

Frontend app is built upon Element-Plus, a popular Vue 3-based UI framework. It interacts with API hosted on the Master Node, and indirectly controls Worker Nodes.

Integration with Other Frameworks

Crawlab SDK provides some helper methods to make it easier for you to integrate your spiders into Crawlab, e.g. saving results.

Scrapy

In settings.py in your Scrapy project, find the variable named ITEM_PIPELINES (a dict variable). Add content below.

ITEM_PIPELINES = {
    'crawlab.scrapy.pipelines.CrawlabPipeline': 888,
}

Then, start the Scrapy spider. After it's done, you should be able to see scraped results in Task Detail -> Data

General Python Spider

Please add below content to your spider files to save results.

# import result saving method
from crawlab import save_item

# this is a result record, must be dict type
result = {'name': 'crawlab'}

# call result saving method
save_item(result)

Then, start the spider. After it's done, you should be able to see scraped results in Task Detail -> Data

Other Frameworks / Languages

A crawling task is actually executed through a shell command. The Task ID will be passed to the crawling task process in the form of environment variable named CRAWLAB_TASK_ID. By doing so, the data can be related to a task.

Comparison with Other F

readme truncated — read the full docs on github

Frequently asked questions

Is crawlab free to use?

crawlab is open source under the BSD-3-Clause licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does crawlab do?

Distributed web crawler admin platform for spiders management regardless of languages and frameworks. 分布式爬虫管理平台,支持任何语言和框架

What is crawlab written in?

crawlab is primarily written in Go. Its source is publicly available at https://github.com/crawlab-team/crawlab, and it has 12,273 GitHub stars.