Web scrapers for local LLMs
A page reader turns one URL into text for the model: 16,979 tok of raw HTML → 4.7–5.9k through any reader → 1.5k with LLMLingua-2 on top (robertz.co article, mean of 2 pages).
Run locally on my fleet.
Series — web scrapers for local LLMs: Overview · Readers compared · Token cost per page · Extraction quality · Output formats · Previous stage: Web search for local LLMs
The field: three families, one stage
The headline number per deep-dive
| Sub-topic | Headline number (robertz.co) | Deep-dive |
|---|---|---|
| Readers compared | Trafilatura 4,728 tok, ~42 ms vs browser readers 5.5–5.9k, 650–940 ms; Firecrawl = 5 containers, ~4.3 GB | Readers compared → |
| Token cost per page | raw HTML 16,979 → reader 4.7–5.9k → LLMLingua-2 1,474; one page ≈ 8.5–10.6× a search (556 tok) | Token cost per page → |
| Extraction quality | Trafilatura 0.84 F1 (WCXB, independent), readability 0.74; run locally (ScrapingHub, 181 pages): Trafilatura 0.955, Crawl4AI fit 0.790, Firecrawl main 0.785 | Extraction quality → |
Browser farm (chromium MCP fetch) | content 4,757 tok (≈ Trafilatura) + envelope 573 tok; cold 5.4–6.7 s vs Crawl4AI 0.38–0.47 s same run (~12–17×); cache hit 2–3 ms | Readers compared → |
| Output formats | Markdown (Trafilatura, Crawl4AI) · plain text (readability) · JSON envelope + 36 metadata keys (Firecrawl) · JSON envelope + 18 keys around Trafilatura Markdown (chromium fetch) · word list (LLMLingua-2) | Output formats → |
Practical picks
| Page type | Pick | Browser | Tokens / page |
|---|---|---|---|
| Article | Trafilatura | ✓ no | ~4.7k |
| Article, context-bound | Trafilatura → LLMLingua-2 @0.33 | ✓ no | ~1.5k (+3.9–5.5 s CPU) |
| Listing / JS-rendered | Crawl4AI fit_markdown | ✗ yes | ~1.3k (U1) |
| Repeat reads / logged-in pages | chromium MCP fetch (browser farm + 7-day cache) | ✗ yes | ~4.8k + ~0.6k envelope; 2–3 ms on a hit, 5–9 s cold |
| Bot-protected / Cloudflare | Camoufox or nodriver → Trafilatura (passed the Cloudflare page all four readers failed) | ✗ yes | ~4.7k (same as Trafilatura), 0.6–0.9 s |
Crawl4AI runs as a local MCP for Hermes on my fleet.
TL;DR
TL;DR: On robertz.co the win is “not HTML” (16,979 → 4.7–5.9k tok), not which reader. Trafilatura matches the browser readers on articles at ~42 ms with no browser and the best F1 (0.84 WCXB independent; 0.955 on 181 ScrapingHub pages run locally, vs Crawl4AI fit 0.790, Firecrawl 0.785); use Crawl4AI for listing or JS pages; stack LLMLingua-2 when context is the bottleneck (→ 1.5k). A Chromium browser farm (chromium MCP
fetch) gives Trafilatura’s tokens + a 300–597 tok JSON envelope at 5–9 s cold; it wins only on cache hits (2–3 ms) and pages that need a real logged-in browser.Series — web scrapers for local LLMs: Overview · Readers compared · Token cost per page · Extraction quality · Output formats · Previous stage: Web search for local LLMs