
WebReaper
io.github.alex-on-ai由 GitHub 账号 alex-on-ai 发布v11.3.2更新于 Oct 24, 2026
AI-native web scraper: scrape, crawl and map any site to clean markdown over stdio. MIT-licensed.
概览
WebReaper 是本地运行的 AI 原生网页爬虫 MCP 服务器,让助手抓取、爬取和映射网站并输出干净的 Markdown 或结构化数据。
- 可以做什么
- 抓取单个页面并转为 Markdown 或结构化 JSON。发现网站上的网址并按条件筛选。递归爬取整个域名并输出为 JSON Lines。按 JSON schema 抽取字段,或用提示词、自动推断 schema 的方式交给 LLM 抽取。遇到封锁时自动从 HTTP 升级到浏览器,必要时再升级到隐身后端。
- 适用场景
- 当助手需要把网站内容转成干净的 Markdown、列出站内网址、递归爬取整个网站,或按 JSON schema 或提示词抽取结构化字段时使用。也适合需要处理 JS 渲染页面或受机器人防护阻挡页面的场景。
- 运行要求
- 以本地进程通过 stdio 运行,需安装 WebReaper.Mcp 包(.NET)。使用 LLM 抽取时需自备 OpenAI 兼容端点、模型名称和 API 密钥;选用隐身后端时会下载约 220 MB 的组件。需要网络访问。
安装
在 SourceWeft 中
- 打开 控制台中的 WebReaper,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
WebReaper
AI-native web scraper. Single binary with a bundled Claude Code skill.
Built by HighCraft.io.
Install
macOS / Linux (Homebrew):
Any POSIX shell (install.sh):
.NET library:
Windows binaries are on the GitHub Releases page; winget and Scoop are on the v10.1 roadmap.
Updating: brew upgrade webreaper (Homebrew), or re-run the install.sh line with --upgrade appended (| sh -s -- --upgrade), or dotnet add package WebReaper (library). When a newer release exists, scrape / crawl / map print a one-line upgrade hint on stderr (interactive terminals only, never in a pipe or CI); disable that check with WEBREAPER_NO_UPDATE_CHECK=1.
30-second demo
After webreaper init, the next Claude Code session picks up the skill and routes scraping intents ("give me the markdown of X", "what blog posts are on Y", "scrape the top 5 articles") to webreaper automatically.
Table of contents
- Why WebReaper
- Quick start
- Bot protection that just works
- Power your agent
- AI features
- Use cases
- Packages
- Compared to Firecrawl, Crawl4AI, and Crawlee
- API overview
- Architecture and interfaces
- Repository structure
- License
Why WebReaper
Quick start
CLI
The CLI is built Native-AOT (ADR-0043), ships as a single binary on every tagged GitHub release across six RIDs (linux-x64, linux-arm64, osx-x64, osx-arm64, win-x64, win-arm64), and is block-aware with automatic browser/stealth escalation (ADR-0083). The macOS binaries are Apple codesigned and notarized (ADR-0071); Homebrew installs run without Gatekeeper warnings on a clean machine.
Library
That is HTTP-only, no extra packages, no schema. For structured fields, swap AsMarkdown() for Extract(schema); for JS-rendered pages, Crawl for CrawlWithBrowser plus a transport satellite (WebReaper.Playwright or WebReaper.Cdp). The full surface is in the API overview.
Bot protection that just works
Most scrapers make you opt into a browser up front and guess when a site is blocking you. WebReaper detects the block and escalates on its own, one page at a time:
- Automatic. A plain
scrapeorcrawlstarts on a fast HTTP fetch and climbs to a real browser only when a page looks blocked (a challenge status, response header, or body marker). No flag needed for the browser fallback. - Per page, host-sticky. The first confirmed block on a host lifts that host's floor, so the rest of a whole-site crawl starts at the working tier instead of re-paying the failed one. You pay for the climb once, not per page.
- No garbage in your data. A page still blocked at the top tier is dropped, never written to your output, and the run exits non-zero so an unattended job knows. Clean data or a clear signal, never a challenge page masquerading as content.
- You decide on stealth.
--stealthstarts at the stealth backend;--auto-stealth(orWEBREAPER_AUTO_STEALTH=1) enables it unattended;--no-auto-stealthcaps the climb at a vanilla browser. The ~220 MB stealth backend downloads only if you opt in.
Self-hosted, single binary, no cloud round-trip (ADR-0083).
Power your agent
Onboarding an agent from zero? Hand it docs/AI-ONBOARDING.md — install → verify → choose-your-path on one page, no credentials anywhere.
Claude Code skill
Writes a polished SKILL.md to .claude/skills/webreaper/. Claude Code loads it on the next session and routes scraping intents to the CLI: "scrape the top 5 stories on HN and summarize each", "give me the markdown of this article", "this Cloudflare-protected site is blocking me". The skill describes when to prefer webreaper over the built-in WebFetch (artifacts and structured data go through webreaper; conversational answers stay on WebFetch).
MCP server
Two MCP servers expose the same tools (scrape, map, extract, extract_with_prompt, extract_inferred, crawl) for clients that speak the Model Context Protocol:
-
WebReaper.Mcp(ADR-0049) speaks stdio, for local clients that spawn a process: Cursor, Claude Desktop, Copilot Studio. -
WebReaper.Mcp.AspNetCore(ADR-0086) speaks Streamable HTTP, for clients that connect to a URL. The headline case is n8n, whose MCP Client node is URL-only and cannot reach a stdio server. Run the Chromium-baked image, point n8n's MCP Client node at the URL with a bearer token, and call the tools from a workflow:See the n8n quickstart.
Both are thin facades over the library API; the primary agent surface remains the CLI.
CLI inside any agent harness
The single binary works inside any shell-spawning agent: LangChain ShellTool, OpenAI Assistants code-interpreter, GitHub Actions, internal scripts. Zero runtime to install; one syscall to invoke.
AI features
1. LLM-ready Markdown, no schema
The Markdown extractor (HtmlToMarkdown primitive, ADR-0063; MarkdownContentExtractor adapter, ADR-0040) emits {title, markdown} per page. Pass the output straight into a follow-up LLM prompt.
2. Source-gen schemas with compile-time guards
The WebReaper.Extraction.Generators Roslyn analyzer (ADR-0045) emits the schema and a Materialize function. Schema typos are compile errors; the generated path uses no reflection so it's AOT-clean.
3. LLM safety net for deterministic extraction
Three composable patterns where the LLM only fires when the deterministic path can't deliver. Same proposer-validator shape across all three.
Stable pages cost zero LLM calls; broken pages cost one call per (page, field) and cache. Schema inference is one call per site (cached for the run). The WebReaper.AI satellite is built on Microsoft.Extensions.AI so any IChatClient works.
4. Autonomous agent: page selection by goal
AgentEngine (ADR-0051) runs a sequential decide → persist → execute loop over a closed-sum AgentDecision (Extract | Follow | Act | Stop). The brain picks each step from the bounded AgentState view; the engine validates (visited-link enforcement, MaxSteps cap), persists (IAgentRunStore), and dispatches. Durable resume across process restarts.
5. Semantic page actions
A natural-language PageAction.SemanticAct(intent) is one of the ten closed-sum arms (ADR-0050 added it; ADR-0074 added Fill / Press / ScrollIntoView for form interactions). The transport resolves it once via the registered IActionResolver (LLM-backed by default), dispatches the concrete arm, and caches the resolution per crawl by intent string. First page pays the LLM, subsequent same-intent pages dispatch the cached arm with no LLM call.
Runnable end-to-end demo
Examples/WebReaper.AiNativeShowcase wires every feature in this section:
Use cases
- Build LLM context from blog or docs sites.
webreaper mappluswebreaper scrapeper URL, piped into a prompt or a vector DB. - Monitor competitor pricing or status pages for changes. Schedule the CLI with cron or a worker, store records in MongoDB or SQLite, plug in
.WithChangeTracking()(ADR-0048) so the sink fires only on diff. Hash-based dedup; cron-friendly. - Run an autonomous research agent.
LlmAgent.RunAsync(url, goal, chatClient)decides which links to follow until the goal is met. Durable resume across restarts. - Scrape Cloudflare-protected catalogs. A plain
scrapeauto-climbs HTTP to a browser on a block; add--stealth(or--auto-stealthfor unattended runs) to escalate to a stealth backend. Blocked pages are dropped, never emitted as challenge-page garbage. - Generate clean datasets from semi-structured pages.
[ScrapeSchema]POCO plus the source generator; reflection-free, AOT-compiles into a native binary. - Embed a scraping primitive in your own app.
dotnet add package WebReaper; the public registration seam lets you plug Redis, Cosmos DB, your own sink.
Packages
The release ships fifteen packages (one core, fourteen satellites), all versioned in lockstep. The core stays dependency-light and Native-AOT-publishable with zero warnings; satellites bring their own SDK dependencies and quarantine them off the core graph (ADR-0009).
WebReaper.Cli (the AOT single-binary; ADR-0043) is not a NuGet package; it ships as platform binaries on every GitHub release (Native-AOT plus dotnet tool install are mutually incompatible on one target). Install via Homebrew or install.sh, or build from source.
Compared to Firecrawl, Crawl4AI, and Crawlee
Crawlee (Apify's Node/Python library) is also worth knowing; it covers similar ground to the WebReaper library API but doesn't ship a binary, a Claude Code skill, or a built-in LLM safety net. Use it if you're already in the Apify ecosystem.
The closest reference is Firecrawl: same AI-native positioning, opposite distribution shape. Firecrawl optimises for the hosted-API flow; WebReaper optimises for the local-binary flow. If you want a managed cloud with someone else's proxies and infra, Firecrawl is the buy. If you want a binary that runs locally with your own LLM key and no metering, WebReaper is the build.
API overview
The library is a fluent builder over a small set of seams. For the deep seam-by-seam reference (interfaces, main entities, custom sinks), see docs/architecture.md.
Schema extraction
Each new("field", "css-selector") is a leaf; nest schemas for objects, set IsList = true for arrays, set Attr = "href" to read an HTML attribute instead of inner text.
Collect records in-process
Get the scraped records back in your own process, no file and no custom sink. Pass Subscribe (ADR-0038) the Add of a thread-safe collection, then read them after the run:
The Crawl driver fans out to sinks concurrently, so a ConcurrentBag is the right collector, not a bare List. For structured fields, read your schema keys out of record.Data instead of "markdown".
Parsing dynamic pages (SPA)
For JS-rendered pages, swap Crawl for CrawlWithBrowser and register a browser transport. Two satellites are available.
WebReaper.Playwright is the modern default (ADR-0053): multi-browser, all ten PageAction arms.
WebReaper.Cdp is the AOT-clean alternative (ADR-0052): raw CDP over System.Net.WebSockets, AOT-publishable. Use for AOT consumers or as the base for stealth backends.
For bot-protected sites, layer WebReaper.Stealth.CloakBrowser (ADR-0054) on top of WebReaper.Cdp:
For visible-browser debugging, add .HeadlessMode(false).
Running JavaScript and page actions
Drive the page as it loads. Pass an actions lambda.
PageActionBuilder exposes Click, Wait, ScrollToEnd, ScrollIntoView, WaitForSelector, WaitForNetworkIdle, EvaluateExpression, Fill, Press, SemanticAct, Repeat / RepeatWithDelay, and Build(). Fill(selector, value) / Press(key) / ScrollIntoView(selector) (ADR-0074) carry an implicit 30 s auto-wait and use the React-friendly native-setter trick on the CDP transport, so controlled components in React / Vue / Svelte observe the change. SemanticAct (ADR-0050) accepts a natural-language intent and resolves it via the registered IActionResolver (see AI features §5).
Persist progress locally
Survive kill -9 and resume across restarts. Two adapters: file-backed (zero deps, in core) and SQLite-backed (durable, opt-in via WebReaper.Sqlite).
Pass dataCleanupOnStart: true to any sink, tracker, or scheduler method to wipe its store at start (note: WriteToJsonFile defaults this to true; the others default to false).
Authorization
If the site needs cookies, call SetCookies and fill the container. You perform the login yourself.
Distributed and serverless
Swap the scheduler, config storage, and link tracker to Redis or Azure Service Bus; multiple workers or serverless functions share one crawl. Examples/WebReaper.AzureFuncs shows the serverless shape (two functions: StartScraping seeds the work, WebReaperSpider is the distributed Crawl driver). Examples/WebReaper.DistributedScraperWorkerService shows the worker-service shape.
DistributedSpiderBuilder.BuildSpider() returns a bare ISpider without a Crawl seed (ADR-0009 / ADR-0025: "two seams, not one bug" split). The worker's config is persisted separately by the start endpoint.
Storage and scheduler backends
Every backend is a swappable seam. In-memory is the default; file-backed lives in core; the rest come from satellites.
Custom sinks, the full interface index, and the main domain entities live in docs/architecture.md.
Repository structure
License
WebReaper is MIT-licensed (ADR-0017). All NuGet packages plus the WebReaper.Cli binary ship under the same terms. Use it commercially, embed it in proprietary software, fork it, modify it, redistribute it; the only ask is that you keep the copyright notice.
Prior to the 10.0.0 wave, WebReaper was GPL-3.0-or-later. The relicense is strictly more permissive: every existing user is unaffected; new users who couldn't embed under GPL now can. Historical contributors are credited in CONTRIBUTORS.md. See docs/adr/0017-relicense-gpl-mit.md for the analysis and contributor consent path.
Contributions are welcome under the same MIT terms; sign-off via DCO (CONTRIBUTING.md).
Built by HighCraft.io — a software and AI engineering team.
来源:README.md,提交 e70da70
工具
0版本历史
1- v11.3.2最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分