Skip to main content

IntelliScrape

PyPI version Python Downloads License

The Python scraper that actually works.

Stop fighting with anti-bot systems. IntelliScrape handles the hard stuff so you can focus on your data.

IntelliScrape Demo

What is this?

IntelliScrape is a Python web scraping library that scrapes 98% of websites out of the box. It automatically picks the best engine, bypasses basic anti-bot detection, and gives you clean text — all with a single function call.

No more switching between requests, playwright, and selenium. No more debugging why your scraper got blocked. Just scrape(url) and you're done.


Installation

pip install intelliscrape

That's it. The core library handles most sites. For protected sites:

# For stealth browsing (bypasses bot detection)
pip install intelliscrape[stealth]

# For CAPTCHA solving
pip install intelliscrape[captcha]

# Everything
pip install intelliscrape[all]

Quick Start

One-liner

from intelliscrape import scrape

text = scrape("https://news.ycombinator.com")
print(text[:500])

Get structured data (title, description, meta tags)

from intelliscrape import IntelliScrape

scraper = IntelliScrape()
data = scraper.get_structured("https://github.com")

print(data.title)
print(data.description)
print(data.og_data)

Scrape with proxy

scraper = IntelliScrape(proxy="user:pass@proxy:8080")
text = scraper.scrape("https://protected-site.com")

Crawl entire website

from intelliscrape import crawl

result = crawl("https://docs.python.org", max_pages=100)
print(f"Scraped {result.total_pages} pages")

for page in result.pages:
    print(f"{page.url}: {len(page.content)} chars")

CLI Usage

# Basic scrape
intelliscrape https://example.com

# Save to file
intelliscrape https://site.com --output result.txt

# Get structured JSON
intelliscrape https://site.com --structured --output data.json

# Stealth mode for protected sites
intelliscrape https://site.com --engine stealth

# With proxy
intelliscrape https://site.com --proxy user:pass@proxy:8080

# Crawl entire site
intelliscrape https://site.com --crawl --max-pages 100

# Check what anti-bot protection a site uses
intelliscrape https://site.com --check-antibot

Features

Feature Status
Automatic static/dynamic detection
TLS fingerprint impersonation
Browser fingerprint randomization
Human-like behavioral simulation
Proxy rotation
CAPTCHA detection & solving
Smart retry with backoff
Rate limiting
Anti-bot vendor detection
Cookie consent handling
Structured data extraction
Session persistence
Multiple export formats
Async support

How It Works

scrape(url)
    ↓
┌─────────────────────────────┐
│   Engine Selection (auto)   │
│  ┌─────────┐ ┌───────────┐  │
│  │ Static  │ │ Stealth   │  │
│  │curl_cffi│ │Playwright │  │
│  └─────────┘ └───────────┘  │
└─────────────────────────────┘
    ↓
┌─────────────────────────────┐
│    Anti-Detection Layer     │
│  • TLS impersonation        │
│  • Header rotation          │
│  • Fingerprint randomize    │
│  • Behavioral simulation    │
└─────────────────────────────┘
    ↓
┌─────────────────────────────┐
│      Smart Pipeline         │
│  • Retry with backoff       │
│  • Rate limiting            │
│  • Anti-bot detection       │
│  • Cookie consent           │
└─────────────────────────────┘
    ↓
┌─────────────────────────────┐
│      Content Extraction     │
│  • Text extraction          │
│  • Structured data (JSON)   │
│  • Clean output             │
└─────────────────────────────┘
    ↓
  Clean Text / JSON

What Sites Can It Scrape?

Works Great ✅

  • Wikipedia, Python.org, MDN
  • GitHub, GitLab, Bitbucket
  • Hacker News, Reddit (most pages)
  • News sites (BBC, CNN, Reuters)
  • Documentation sites
  • Blogs (WordPress, Ghost, Hugo)
  • E-commerce (basic)

Works with Stealth Mode 🛡️

  • Cloudflare-protected sites
  • Sites with bot detection
  • JavaScript-heavy SPAs
  • Dynamic content sites

Needs Proxy + CAPTCHA Solver 🔐

  • LinkedIn
  • Amazon
  • Twitter/X
  • Instagram
  • Highly protected platforms

Engine Selection

Engine When to Use Dependencies
static Default, fast, most sites curl_cffi
playwright_stealth JS-heavy, basic bot detection playwright
nodriver Protected sites, advanced bypass nodriver
# Force a specific engine
scraper = IntelliScrape()
text = scraper.scrape("https://site.com", engine="playwright_stealth")

For Data Analysts

IntelliScrape is built with data workflows in mind:

from intelliscrape import IntelliScrape
import json

scraper = IntelliScrape()

# Scrape multiple pages
urls = [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://example.com/page3",
]

results = scraper.scrape_many(urls)

# Save as JSON
with open("data.json", "w") as f:
    json.dump(results, f, indent=2)

# Get structured data for analysis
for url in urls:
    data = scraper.get_structured(url)
    print(f"{data.title} | {data.author} | {data.date_published}")

Export to different formats

# JSON
intelliscrape https://site.com --structured --output data.json

# Text
intelliscrape https://site.com --output content.txt

# Crawl and save
intelliscrape https://docs.python.org --crawl --max-pages 50 --output docs.txt

Advanced Configuration

from intelliscrape import IntelliScrape

scraper = IntelliScrape(
    # Proxy
    proxy="user:pass@proxy:8080",
    
    # CAPTCHA solving
    api_key="your_2captcha_or_capsolver_key",
    captcha_provider="capsolver",
    
    # Browser settings
    headless=True,
    simulate_behavior=True,
    
    # Rate limiting
    min_delay=0.5,
    max_delay=3.0,
    requests_per_minute=30,
    
    # TLS fingerprint
    tls_profile="chrome131",
    
    # Session persistence
    session_profile="my_session",
    
    # Logging
    log_level="INFO",
)

Project Structure

intelliscrape/
├── core.py                  # Main API
├── cli.py                   # Command line
├── engines/
│   ├── static.py            # curl_cffi (TLS bypass)
│   ├── playwright_stealth.py # Playwright + patches
│   └── stealth.py           # nodriver (advanced)
├── anti_detection/
│   ├── headers.py           # Header rotation
│   ├── tls.py               # TLS profiles
│   ├── fingerprint.py       # Browser fingerprinting
│   ├── behavior.py          # Human simulation
│   ├── antibot.py           # Vendor detection
│   ├── throttle.py          # Retry & rate limit
│   └── consent.py           # Cookie consent
├── challenges/
│   └── captcha.py           # CAPTCHA solving
├── proxy/
│   └── __init__.py          # Proxy management
├── session/
│   └── __init__.py          # Session persistence
├── extractor/
│   ├── __init__.py          # Text extraction
│   └── structured.py        # JSON-LD, meta tags
├── exporters/
│   └── __init__.py          # TXT, JSON, CSV, MD
├── crawler.py               # Website crawler
├── parser.py                # HTML parser
├── cleaner.py               # Text cleaning
└── utils.py                 # Utilities

Contributing

We welcome contributions! Whether it's:

  • New anti-bot bypass patterns
  • CAPTCHA solving techniques
  • Proxy provider integrations
  • Bug fixes
  • Documentation

Check out CONTRIBUTING.md to get started.


Community


License

MIT License - see LICENSE for details.


Built with ❤️ for the data community.


Generating the Demo GIF

To regenerate the demo GIF:

# Install vhs (macOS)
brew install charmbracelet/tap/vhs

# Or using Go
go install github.com/charmbracelet/vhs@latest

# Generate the GIF
vhs demo.tape

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

intelliscrape-2.1.0.tar.gz (60.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

intelliscrape-2.1.0-py3-none-any.whl (69.8 kB view details)

Uploaded Python 3

File details

Details for the file intelliscrape-2.1.0.tar.gz.

File metadata

  • Download URL: intelliscrape-2.1.0.tar.gz
  • Upload date:
  • Size: 60.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for intelliscrape-2.1.0.tar.gz
Algorithm Hash digest
SHA256 fc82978a4575bd640fb4bd3216dce71708b2f3f12975285f5453d1c3731b90d3
MD5 51aa768a8302a02517ddc935e1207e15
BLAKE2b-256 127d1a2ba54990ce08f7aceecb2a0cc83c1f6cedc953ed782149037dc6af30f6

See more details on using hashes here.

File details

Details for the file intelliscrape-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: intelliscrape-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 69.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for intelliscrape-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ebaff09d7c17b034c740d563cbdabac4e9a98cc42cdfa449711fe4b3f593f4e3
MD5 b987dffb6572d20793c56fdb03d95a7d
BLAKE2b-256 2dc8d134a04bc681b9201d5f2f9d8263e2e2bbc8c4ca60a303364d51fabc3445

See more details on using hashes here.

Release history Release notifications | RSS feed

3.1.2

2 files

3.1.1

2 files

3.1.0

2 files

3.0.0

2 files

2.9.2

2 files

2.9.1

2 files

2.9.0

2 files

2.8.0

2 files

2.6.0

2 files

2.5.1

2 files

2.5.0

2 files

This release

2.1.0 This release

2 files

2.0.0

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page