crawlee
Crawlee for Python
What it is and what it does
Crawlee is a Python framework for building web scrapers and crawlers that abstracts away the complexity of HTTP requests, browser automation, parallel execution, and data persistence. It offers two main crawler types: BeautifulSoupCrawler for fast HTML parsing via HTTP, and PlaywrightCrawler for JavaScript-heavy sites that require a headless browser. Both crawlers handle retries, proxy rotation, session management, and request routing through a decorator-based handler system, storing results in a pluggable storage backend.
The library is built on asyncio for efficient concurrent crawling and includes type hints throughout for IDE support and static analysis. It targets developers who want reliable, maintainable scrapers without building infrastructure from scratch—handling bot detection evasion, URL queuing, error recovery, and data export out of the box. Core dependencies are minimal; optional extras (beautifulsoup, playwright) are installed only when needed.
Use it for:
- Extract structured data from static HTML pages using BeautifulSoupCrawler for high-throughput scraping without browser overhead.
- Scrape JavaScript-rendered content by using PlaywrightCrawler to interact with dynamic pages and wait for content generation.
- Build a recursive web crawler that discovers and follows links across a domain with automatic URL queuing and deduplication.
- Rotate proxies and manage sessions automatically to avoid IP blocking and bot detection when scraping protected sites.
- Export crawled data to machine-readable formats (JSON, CSV) with persistent storage for fault-tolerant long-running jobs.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Crawlee is a web scraping and browser automation library that handles both HTTP-based and headless browser crawling with built-in parallel execution, proxy rotation, request routing, and persistent URL queuing.
Yes. Crawlee is actively maintained, has no known vulnerabilities, low install friction, and a permissive license. It solves a real problem (reliable, parallel web scraping) with a modern async design and type hints. Choose it if you need both HTTP and browser-based crawling in one framework; if you only need simple HTTP requests, a lighter library may suffice.
Install
crawlee on PyPI
pip
pip install crawleeuv
uv add crawleepoetry
poetry add crawleeInstalling crawlee
Before you install
Low friction installation with a pure-wheel distribution. Actively maintained with a release 8 days old and recent commits. Requires Python 3.10 or later. Optional extras (beautifulsoup, playwright) keep core dependencies lean; full-featured install via crawlee[all] adds browser automation capabilities.
License in practice
Apache-2.0 permissive license allows commercial and private use with minimal restrictions; you must include a copy of the license and state significant changes, but there are no copyleft obligations.
Quickstart
pip install crawlee
import asyncio
from crawlee.crawlers import BeautifulSoupCrawler, BeautifulSoupCrawlingContext
async def main():
crawler = BeautifulSoupCrawler(max_requests_per_crawl=10)
@crawler.router.default_handler
async def handler(context: BeautifulSoupCrawlingContext):
await context.push_data({'url': context.request.url})
await crawler.run(['https://example.com'])
asyncio.run(main())
Playwright dependencies must be installed separately (playwright install) for browser-based crawling; BeautifulSoup extra required for HTML parsing crawler.
Verify before relying
- Whether impit (a runtime dependency) is a maintained HTTP client or has known issues.
- Performance characteristics under high concurrency or with large-scale crawls.
- Specific anti-bot evasion techniques and their effectiveness against modern protections.
Package facts
| License | Apache-2.0 (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 12 — async-timeout, cachetools, colorama, impit, more-itertools, protego, psutil, pydantic-settings, pydantic, tldextract, typing-extensions, yarl |
| Maintenance | actively maintained — 8 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 899,049/month — #4,780 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: crawlee-1.9.1-py3-none-any.whl
Keywords: apify, automation, chrome, crawlee, crawler, headless, scraper, scraping
Tags
More Libraries packages
urllib3 is an HTTP client library that provides…
permissive · top 100 on PyPI
requestsRequests is a Python HTTP library that…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
python-dateutilProvides parsing, arithmetic, and recurrence…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
pytestpytest is a testing framework that lets you…
permissive · top 100 on PyPI
Crawl4AICrawl4AI is an async web crawler and scraper…
permissive · top 5,000 on PyPI
icrawlericrawler is a lightweight, modular web crawler…
permissive · top 15,000 on PyPI
scraplingScrapling is a web scraping and crawling…
permissive · top 5,000 on PyPI
ScrapyScrapy is a web scraping framework that…
permissive · top 5,000 on PyPI
zenrowsPython client for the ZenRows web scraping API…
permissive · top 15,000 on PyPI
crawlerdetectIdentifies bots, crawlers, and spiders by…
permissive · top 15,000 on PyPI
scrapy-playwrightIntegrates Playwright browser automation into…
permissive · top 5,000 on PyPI
LinkCheckerLinkChecker validates links across websites by…
copyleft · top 15,000 on PyPI
django-robotsA Django application that manages robots.txt…
permissive · top 15,000 on PyPI
pyppeteerAutomates headless Chrome/Chromium browser…
permissive · top 5,000 on PyPI