Loading...
Loading...
Compare original and translation side by side
uv run scripts/crawl.py --url https://example.com --output reports/example.md--output01uv run scripts/crawl.py --url https://example.com --output reports/example.md--output01| Tier | Module | Requires |
|---|---|---|
| 1 | Firecrawl ( | |
| 2 | Jina Reader ( | Nothing — free, no key needed |
| 3 | Scrapling ( | Local headless browser (auto-installs via pip) |
| 层级 | 模块 | 依赖条件 |
|---|---|---|
| 1 | Firecrawl ( | |
| 2 | Jina Reader ( | 无 — 免费使用,无需密钥 |
| 3 | Scrapling ( | 本地无头浏览器(通过pip自动安装) |
crawler-skill/
├── SKILL.md ← this file
├── scripts/
│ ├── crawl.py ← main CLI entry point (PEP 723 inline deps)
│ └── src/
│ ├── domain_router.py ← URL-to-tier routing rules
│ ├── firecrawl_scraper.py ← Tier 1: Firecrawl API
│ ├── jina_reader.py ← Tier 2: Jina r.jina.ai proxy
│ └── scrapling_scraper.py ← Tier 3: local headless scraper
└── tests/
└── test_crawl.py ← 70 pytest tests (all passing)crawler-skill/
├── SKILL.md ← 本文档
├── scripts/
│ ├── crawl.py ← 主CLI入口点(PEP 723 内联依赖)
│ └── src/
│ ├── domain_router.py ← URL到层级的路由规则
│ ├── firecrawl_scraper.py ← 层级1:Firecrawl API
│ ├── jina_reader.py ← 层级2:Jina r.jina.ai 代理
│ └── scrapling_scraper.py ← 层级3:本地无头爬虫
└── tests/
└── test_crawl.py ← 70个pytest测试用例(全部通过)undefinedundefinedundefinedundefinedhttp://https://ftp://file://javascript:1http://https://ftp://file://javascript:1--outputreports/{project_root}/reportsuv run scripts/crawl.py --url <URL> --output reports/result.md--outputreports/{project_root}/reportsuv run scripts/crawl.py --url <URL> --output reports/result.mdFIRECRAWL_API_URL=http://localhost:3002 uv run scripts/crawl.py --url https://example.comFIRECRAWL_API_URL=http://localhost:3002 uv run scripts/crawl.py --url https://example.comError:Access DeniedError:Access Deniedscripts/src/domain_router.py| Domain | Skipped tiers | Active chain |
|---|---|---|
| firecrawl | jina → scrapling |
| firecrawl + jina | scrapling only |
| everything else | — | firecrawl → jina → scrapling |
blog.medium.commedium.com.medium.comother.weixin.qq.commp.weixin.qq.comscripts/src/domain_router.py| 域名 | 跳过的层级 | 启用的链式流程 |
|---|---|---|
| firecrawl | jina → scrapling |
| firecrawl + jina | 仅scrapling |
| 其他所有域名 | — | firecrawl → jina → scrapling |
blog.medium.commedium.com.medium.comother.weixin.qq.commp.weixin.qq.comuv run pytest tests/ -vuv run pytest tests/ -vuv runuv runfirecrawl-py>=2.0httpx>=0.27scrapling>=0.2html2text>=2024.2.26firecrawl-py>=2.0httpx>=0.27scrapling>=0.2html2text>=2024.2.26crawl.pyresult = subprocess.run(
["uv", "run", "scripts/crawl.py", "--url", url],
capture_output=True, text=True
)
if result.returncode == 0:
markdown = result.stdoutcrawl.pyresult = subprocess.run(
["uv", "run", "scripts/crawl.py", "--url", url],
capture_output=True, text=True
)
if result.returncode == 0:
markdown = result.stdout