Huashu Design
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…

UncleCode’s open source web crawler and scraper for language models and AI agents. It loads a page in a browser and returns clean Markdown, or JSON in a shape you define. The notes cover the Python library, the crwl command, the Docker server and MCP.
Crawl4AI is an open-source project on GitHub in the Developer category, listed by Mindket. It is free. This is version 2, last updated on . Install it from GitHub as its README says. Get Mindket’s setup notes on your Mindket account, as a zip.
pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor
And 2 more in Where to use it
Crawl4AI is an open source web crawler and scraper for language models and AI agents. You give it an address and it loads the page in a headless browser. It hands back clean Markdown, or JSON in a shape you define. Its README says you can run it yourself, free forever. It comes as a Python library, a command called crwl and a Docker server with a REST API. The README also describes Crawl4AI Cloud, a hosted service with its own account and prices. This listing covers the parts you run yourself, and names the cloud only where the maker gives an agent-setup line for it.
Developers who feed web pages to a model. That means RAG pipelines, agents that read the web and data jobs that need a page’s text and tables as clean Markdown. The library and the crwl command need Python 3.10 or newer and a terminal. The Docker server needs Docker instead. The Docker server suits a team that wants one crawler its apps call over HTTP. Skip it if you only want to read one page once, since copying the text by hand is quicker.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| AI app building | Developers building RAG or agents | Turn pages into Markdown they can index or hand to a model | A developer crawls a documentation site into Markdown and loads it into a RAG index. The README names RAG, AI agents and data pipelines as its uses. |
| Data work | Analysts and data engineers | Pull repeating records out of pages as JSON with a CSS schema and no LLM | An engineer describes one quote block with a schema and extracts every quote, author and tag from a scrolling page, as the README’s example does. |
| Price and product research | Analysts | Let an LLM read an irregular page into fields they define | An analyst extracts each model name with its input and output fee from a pricing page, as the README’s LLM example does. |
| Agent users | People who run Claude Code or another agent | Give the agent the crawler as MCP tools | An agent calls the md or crawl tool on your own server to read a page. |
Crawl4AI runs where you put it, and the maker’s pages name these routes.
The README says it drives Chromium, Firefox and WebKit.
Get it saves a zip of Mindket’s setup notes in your downloads folder, with a file for the library, the command line, the Docker server, recipes and each agent. The main route is pip.
| Need | Detail |
|---|---|
| Python | Python 3.10 or newer, which is what the package’s PyPI page asks for |
| A browser | crawl4ai-setup installs one for you, once |
| Docker | Only for the server: Docker 20.10.0 or newer, compose v2.24 or newer and at least 4 GB of RAM for the container |
| A model | Only for LLM features: a provider key, or a local model such as ollama/llama3.3. Plain crawling and CSS extraction need none |
| Extras | Optional. The installation page warns that the torch, transformer and all extras bring large models and raise disk use and memory load |
pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor
If the browser setup fails, the README gives a manual line:
python -m playwright install --with-deps chromium
The README’s first script prints a page as Markdown.
import asyncio
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://news.ycombinator.com")
print(result.markdown)
asyncio.run(main())You can run Crawl4AI in three ways.
| Way | Start it | What you get |
|---|---|---|
| Python library | AsyncWebCrawler in a script | Every option, with the result as an object that holds the Markdown, the extracted content, links and media |
| The crwl command | crwl https://news.ycombinator.com -o markdown | The page as Markdown, JSON or filtered Markdown in your terminal |
| Docker server | docker run, then a POST to /md or /crawl | A REST API, a dashboard at /dashboard and a playground at /playground |
The crwl command picks its output with -o. Deep crawls use the same command.
crwl https://news.ycombinator.com -o markdown crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
The second line crawls the maker’s own docs breadth first and stops at 10 pages.
The Docker server needs a token. Without one it answers only inside its container, so your published port resets the connection even though Docker shows the container healthy. Make a token, start the container, and give it about 10 seconds.
export CRAWL4AI_API_TOKEN="$(openssl rand -hex 32)" docker run -d -p 11235:11235 --name crawl4ai --shm-size=1g \ -e CRAWL4AI_API_TOKEN="$CRAWL4AI_API_TOKEN" \ unclecode/crawl4ai:latest
Then send the README’s test request.
curl -s http://localhost:11235/md \
-H "Authorization: Bearer $CRAWL4AI_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://news.ycombinator.com"}' | jq -r .markdownIn Python, two classes hold the settings. BrowserConfig controls the browser. CrawlerRunConfig controls each crawl: caching, extraction, timeouts and hooks. The Quick Start says the default cache mode bypasses the cache, so you get fresh content.
You want every quote from quotes.toscrape.com/scroll as JSON. That page loads more quotes as you scroll, so the README’s script sets scan_full_page to True and describes one quote block with a CSS schema.
schema = {
"name": "Quotes",
"baseSelector": "div.quote",
"fields": [
{"name": "text", "selector": "span.text", "type": "text"},
{"name": "author", "selector": "small.author", "type": "text"},
{"name": "tags", "selector": "a.tag", "type": "list", "fields": [{"name": "tag", "type": "text"}]},
],
}The script passes JsonCssExtractionStrategy(schema) in the run config, then prints how many quotes it extracted and the first one as JSON. No model is called. The README’s LLM example uses LLMExtractionStrategy with a model name (openai/gpt-4o-mini) and a Pydantic schema on a pricing page, and the page text then goes to that model.
If you are new. A crawler visits web pages, and a scraper reads data out of them. Raw HTML is full of menus, scripts and tags, which a model reads poorly. Markdown keeps the headings, lists, tables and code in plain text. RAG means a model answers from passages you hand it. A schema is a short description of the fields you want from a page, such as title, link and price. Start with the first script on one page, or with crwl and a single address, before you touch any settings.
For experts. The Markdown result carries a raw version and a fit version. The fit version passes through a content filter, and the README names PruningContentFilterLXML, BM25ContentFilter for a query and LLMContentFilter. Extraction has no-LLM strategies (JsonCssExtractionStrategy, JsonXPathExtractionStrategy and RegexExtractionStrategy) and LLMExtractionStrategy, which takes any provider LiteLLM supports.
A one-time call to generate_schema asks an LLM to write a reusable CSS schema, and later runs need no model. Deep crawls come as breadth-first, depth-first and best-first strategies, and the Deep Crawling page marks best-first as the recommended one. resume_state resumes a long crawl after a crash. AdaptiveCrawler stops when it has learned enough to answer your query, and arun_many runs many URLs with a memory-adaptive dispatcher.
The Docker server has been secure by default since 0.9.0. Every endpoint except GET /health needs a bearer token. A screenshot or PDF comes back in the response with an artifact id as well. The stored file downloads from /artifacts/<artifact_id> with your token, and artifacts expire. Hooks stay off until you set CRAWL4AI_HOOKS_ENABLED=true, and they are declarative JSON actions, not Python code.
The server’s MCP endpoints are /mcp/sse over Server-Sent Events and /mcp/ws over WebSocket. Their tools are md, html, screenshot, pdf, execute_js, crawl and ask.
Crawl4AI runs on your own machine, and a few details are worth reading first.
This kit holds setup notes only. Mindket wrote them. Crawl4AI itself installs from its maker's repository and from PyPI: https://github.com/unclecode/crawl4ai
These notes are not made or endorsed by the Crawl4AI project or its maker. The README opens with "Crawl4AI turns any website into clean, LLM-ready Markdown for RAG, AI agents and data pipelines." The README is https://github.com/unclecode/crawl4ai/blob/main/README.md and the documentation is https://docs.crawl4ai.com
License: Apache-2.0. GitHub names it, and the LICENSE file (https://github.com/unclecode/crawl4ai/blob/main/LICENSE) is the Apache License 2.0 text with an attribution requirement added at its end. See "Attribution" below.
The README also describes a hosted service, Crawl4AI Cloud, from the same maker. It is a separate product with an account, a key and prices of its own. These notes cover the open source library, the command line and the Docker server, and name the cloud only where the maker's pages give an agent-setup line for it.
crawl4ai, the Python package from PyPI. It gives you the AsyncWebCrawler class and the crwl, crawl4ai-setup and crawl4ai-doctor commands. Source: https://github.com/unclecode/crawl4ai/blob/main/README.md, https://docs.crawl4ai.com/core/installation/ and https://docs.crawl4ai.com/core/cli/crawl4ai-setup installs once. Source: https://github.com/unclecode/crawl4ai/blob/main/README.mdcrawl4ai[torch], crawl4ai[transformer] and crawl4ai[all], which bring large dependencies. Source: https://docs.crawl4ai.com/core/installation/unclecode/crawl4ai, for the self-hosted server. Source: https://docs.crawl4ai.com/core/self-hosting/requires_python value on the package's PyPI page: https://pypi.org/project/crawl4ai/ollama/llama3.3. Plain crawling and CSS extraction need none. See setup/recipes.md.pip install -U crawl4ai
crawl4ai-setup
Source: https://github.com/unclecode/crawl4ai/blob/main/README.md
crwl commandThe installation page gives this line for the stable version:
pip install -U crawl4ai
The installation page adds that pip install crawl4ai --pre installs the latest pre-release and pip install crawl4ai== followed by a version number installs one exact version, and says to use the stable version in production. Source: https://docs.crawl4ai.com/core/installation/
The README and the docs give no uninstall steps. These two lines are Mindket's notes, not the maker's. pip uninstall crawl4ai removes the package. If you made a virtual environment only for it, deleting its folder removes everything in it. For the Docker server, the self-hosting guide gives docker stop crawl4ai && docker rm crawl4ai.
The README and the documentation pages these notes draw on say nothing about usage data. A crawl connects to the addresses you give it. LLM extraction sends the page text to the model you set. Using the cloud sends your requests to api.crawl4ai.com with your key.
The LICENSE file ends with a requirement that every distribution, publication or public use of the software, or of a work based on it, carries this line:
"This product includes software developed by UncleCode (https://x.com/unclecode) as part of the Crawl4AI project (https://github.com/unclecode/crawl4ai)."
The README's "License & Attribution" section says that when using Crawl4AI you must include one of two attribution methods: a "Powered by Crawl4AI" badge (recommended), or this line in your documentation:
This project uses Crawl4AI (https://github.com/unclecode/crawl4ai) for web data extraction.
Source: https://github.com/unclecode/crawl4ai/blob/main/LICENSE and https://github.com/unclecode/crawl4ai/blob/main/README.md
The deep crawling page says to be a good web citizen and respect robots.txt, and notes this is disabled by default. The undetected browser page closes with "Always respect robots.txt and website terms of service" and "Use appropriate delays to avoid overwhelming servers". Sources: https://docs.crawl4ai.com/core/deep-crawling/ and https://docs.crawl4ai.com/advanced/undetected-browser/
README.md 6 KB setup/claude-code.md 3 KB setup/codex.md 1 KB setup/command-line.md 4 KB setup/cursor.md 1 KB setup/docker-server.md 5 KB setup/other-agents.md 3 KB setup/python-library.md 4 KB setup/recipes.md 11 KB
Updated by Mindket to the current version of this kit.
Listed GitHub projects in the same category that share the most topics with this one.
| Product | Stars | Activity | Language | License | Last change |
|---|---|---|---|---|---|
| Crawl4AI This page | 87,016 | — | — | Apache-2.0 | — |
| ScraplingShares crawler · data-extraction · playwright | 99,911 | Active | Python | BSD-3-Clause | |
| Awesome Self-Hosted AIShares rag · open-source · llm | 113 | Active | JavaScript | CC0-1.0 | |
| 闲鱼智能监控系统Shares playwright · open-source · ai | 18,425 | Quiet | Python | MIT | |
| Awesome LLM AppsShares rag · python | 144,222 | — | — | Apache-2.0 | — |
| AgnoShares python · ai · ai-agents | 43,097 | Active | Python | Apache-2.0 |
Posts and comments that name this project on Hacker News, Bluesky, X, Reddit, Facebook and YouTube, found by a weekly search and on Trendshift. Mindket doesn’t write or check them. Open one to read it where it was posted.
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
op7418 · Skill
Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…
alirezarezvani · Skill
Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…
D4Vinci · Kit
This Python web scraping framework combines fast HTTP requests, browser automation, and data parsing into one library. It includes an MCP server for AI agents…
sansan0 · Kit
An open source news and public opinion monitor. It reads Chinese hot-search lists and your RSS feeds, keeps what matches your keywords or an AI score, and push…
glincker · Kit
Lists 309 open-source AI projects you can run on your own hardware or server, grouped into sections such as LLM runtimes, agents, RAG and speech, with a weekly…