12 KiB
name, description, version, tools
| name | description | version | tools | |||||
|---|---|---|---|---|---|---|---|---|
| web-scraping-toolkit | 五个网页抓取工具的使用手册 — Jina Reader(快)、Crawl4AI(深)、Scrapling(反爬)、CamouFox(隐身浏览器)、AutoCLI(Chrome登录态复用+AI生成) | 1.1 |
|
Web Scraping Toolkit
四个工具互补,覆盖从单页到批量、从简单到反爬的全场景。
1. Jina Reader — 单页极速抓取
适用场景: 快速抓取单个 URL 的正文内容,返回 Markdown 格式。最适合调研、阅读文章、提取信息。
无需 API Key,直接用 HTTP 请求:
# 终端/curl 方式(最快)
# curl -s -L "https://r.jina.ai/{URL}" -H "Accept: text/plain"
# Python 方式
import requests
def jina_read(url: str) -> str:
"""抓取单个页面,返回 Markdown 文本"""
resp = requests.get(
f"https://r.jina.ai/{url}",
headers={"Accept": "text/plain"}
)
return resp.text
# 高级用法 — 返回 JSON(含标题、链接等元数据)
def jina_read_json(url: str) -> dict:
resp = requests.get(
f"https://r.jina.ai/{url}",
headers={"Accept": "application/json"}
)
return resp.json()
高级 Header:
X-With-Links-Summary: true— 返回页面所有链接X-With-Images-Summary: true— 返回页面所有图片X-Return-Format: html— 返回原始 HTML 而非 MarkdownX-Set-Cookie: key=value— 传递 Cookie
限制: 免费额度有速率限制(约 20 req/min),大批量请用 Crawl4AI。
2. Crawl4AI — 批量深度抓取
适用场景: 批量抓取整个网站、多页爬取、JS 渲染页面、结构化数据提取。
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
async def crawl_single(url: str):
"""抓取单页(带 JS 渲染)"""
browser_config = BrowserConfig(headless=True)
run_config = CrawlerRunConfig(cache_mode=CacheMode.BYPASS)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(url=url, config=run_config)
return {
"url": result.url,
"markdown": result.markdown,
"html": result.html,
"links": result.links,
"media": result.media,
}
async def crawl_batch(urls: list[str]):
"""批量抓取多个 URL"""
browser_config = BrowserConfig(headless=True)
run_config = CrawlerRunConfig(cache_mode=CacheMode.BYPASS)
async with AsyncWebCrawler(config=browser_config) as crawler:
results = await crawler.arun_many(urls=urls, config=run_config)
return [{"url": r.url, "markdown": r.markdown} for r in results]
async def crawl_site(base_url: str, max_pages: int = 20):
"""深度爬取整个站点"""
browser_config = BrowserConfig(headless=True)
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
max_pages=max_pages,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
results = await crawler.arun(url=base_url, config=run_config)
return results
关键配置:
BrowserConfig(headless=True, browser_type="chromium")— 默认 ChromiumCrawlerRunConfig(css_selector="article")— 只提取特定 CSS 区域CrawlerRunConfig(extracted_content_type="json")— 配合 schema 做结构化提取CrawlerRunConfig(cache_mode=CacheMode.ENABLED)— 启用缓存加速重复抓取
**注意:**crawl4ai 使用的 lxml 版本可能与 scrapling 冲突,但实际影响可忽略(6.x 向下兼容 5.x API)。
3. Scrapling — 反爬绕过专用
适用场景: 被 Cloudflare/DataDok/PerimeterX 等反爬系统保护的网站。自动模拟真实浏览器指纹。
from scrapling import Fetcher, StealthyFetcher, PlayWrightFetcher
# 方式1:基础 Fetcher(轻量级,自动处理简单反爬)
page = Fetcher.get("https://example.com/protected")
print(page.status, page.text[:200])
# 方式2:StealthyFetcher(中等反爬,使用 curl_cffi 模拟浏览器指纹)
page = StealthyFetcher.fetch("https://example.com/protected")
# 可传参:headless=True, wait_selector="css:.content", network_idle=True
# 方式3:PlayWrightFetcher(最强反爬,真实浏览器 + stealth 插件)
page = PlayWrightFetcher.fetch(
"https://example.com/protected",
headless=True,
wait_selector="css:.main-content",
network_idle=True,
timeout=30000
)
# 提取数据 — CSS 选择器
items = page.css(".product-item")
for item in items:
title = item.css_first(".title").text()
price = item.css_first(".price").text()
# 提取数据 — XPath
links = page.xpath("//a[@class='product-link']")
# 自动适配网页结构(智能匹配)
page = Fetcher.get("https://example.com")
similar = page.find("product-card", score_threshold=0.5)
三种引擎对比:
| 引擎 | 速度 | 反爬能力 | JS渲染 | 适用 |
|---|---|---|---|---|
| Fetcher | ⚡最快 | 低 | ❌ | 静态页面 |
| StealthyFetcher | 🚀快 | 中高 | ❌ | Cloudflare等 |
| PlayWrightFetcher | 🐌较慢 | 最高 | ✅ | 重度反爬+JS |
4. CamouFox — 隐身浏览器(专治登录墙)
适用场景: 需要登录才能访问的内容、复杂的反爬检测、人机验证。基于 Firefox,指纹伪装极强。
from camoufox.sync_api import Camoufox
# 基础用法
with Camoufox(headless=True) as browser:
page = browser.new_page()
page.goto("https://example.com/login")
page.fill("#username", "myuser")
page.fill("#password", "mypass")
page.click("button[type=submit]")
page.wait_for_load_state("networkidle")
# 登录后抓取内容
content = page.content()
print(content[:500])
# 异步用法
from camoufox.async_api import AsyncCamoufox
async def stealth_browse(url: str):
async with AsyncCamoufox(headless=True) as browser:
page = await browser.new_page()
await page.goto(url)
await page.wait_for_load_state("networkidle")
return await page.content()
# 代理模式(防 IP 封锁)
with Camoufox(
headless=True,
proxy={"server": "http://proxy:port", "username": "u", "password": "p"}
) as browser:
page = browser.new_page()
page.goto("https://example.com")
# 反指纹增强选项
with Camoufox(
headless=True,
humanize=True, # 模拟人类操作节奏
os=["windows"], # 伪装为 Windows 系统
geoip=True, # 自动匹配地理IP
) as browser:
page = browser.new_page()
page.goto("https://example.com")
CamouFox vs Playwright 对比:
| 特性 | Playwright | CamouFox |
|---|---|---|
| 浏览器引擎 | Chromium | Firefox |
| 反指纹 | 无内置 | 内置强伪装 |
| 登录墙 | 需要手动设置 | 自然绕过 |
| Cloudflare | 偶尔被检测 | 基本不检测 |
| 速度 | 快 | 略慢 |
浏览器二进制管理:
- 安装/更新:
python -m camoufox fetch - 当前版本:v135.0.1-beta.24
5. AutoCLI — Chrome 登录态复用 + AI 生成适配器
适用场景: 已在 Chrome 浏览器登录的站点,直接复用 Cookie 抓取数据,无需管理 API Key。55+ 站点 333 个内置命令(Twitter/X、Reddit、Bilibili、知乎、小红书、YouTube 等)。AI 可自动生成新站点适配器。
GitHub: nashsu/AutoCLI ⭐2.6k | Rust 单二进制 4.7MB | Apache 2.0
安装(一行命令):
curl -fsSL https://raw.githubusercontent.com/nashsu/autocli/main/scripts/install.sh | sh
Chrome 扩展设置(浏览器类命令必需):
- 从 Releases 下载
autocli-chrome-extension.zip - Chrome →
chrome://extensions→ 开发者模式 → 加载已解压扩展 - 扩展自动连接 autocli daemon
常用命令:
# 查看所有命令
autocli --help
autocli hackernews --help
# 公开 API(无需浏览器)
autocli hackernews top --limit 10
autocli hackernews top --limit 5 --format json
# 需要浏览器+登录态
autocli bilibili hot --limit 20
autocli twitter search "rust lang" --limit 10
autocli xiaohongshu search "关键词"
# AI 命令 — 自动生成适配器
autocli auth # 首次认证 autocli.ai
autocli generate --ai # AI 分析当前页面生成适配器
autocli search https://example.com # 搜索已有适配器
autocli explore <url> # 分析网站 API
autocli cascade <url> # 探测认证策略
# 多格式输出
autocli bilibili hot --format json|yaml|csv|markdown
# 诊断
autocli doctor
v0.3.2 新功能: Chrome 扩展可视化选数据 — 在页面上点选元素,AI 自动扩展相关字段并生成完整抓取规则。
与其他工具的关键区别:
- 无需 API Key — 直接复用 Chrome 已有登录态,其他工具都需要自己管理登录/cookie
- CLI 原生 — 命令行直接调用,天然适合 AI Agent 集成
- AI 生成 — 自动分析任意网站创建适配器,其他工具需手动编写选择器
- 速度极快 — Rust 实现,比 Node.js 原版快 12x
⚠️ 限制:
- 服务器环境无 Chrome 桌面 → 无法使用 Chrome 扩展和浏览器类命令(需有桌面浏览器)
- 适合用户本地电脑运行,或在 VNC/远程桌面环境中使用
- 公开 API 命令(hackernews 等)可在服务器直接用
快速选型指南
| 需求 | 工具 | 一行代码 |
|---|---|---|
| 读一篇文章 | Jina Reader | curl -s https://r.jina.ai/URL |
| 批量抓100页 | Crawl4AI | AsyncWebCrawler().arun_many(urls) |
| 反爬网站 | Scrapling | StealthyFetcher.fetch(url) |
| 需要登录 | CamouFox / AutoCLI | Camoufox(headless=True) / autocli x search "key" |
| JS重页面 | Crawl4AI / Scrapling PW | 都可处理JS |
| 速度优先 | Jina Reader | 无需渲染,最快 |
| 已登录Chrome直接抓 | AutoCLI | autocli <site> <cmd> |
| AI自动生成抓取规则 | AutoCLI | autocli generate --ai |
免费代理获取(补充)
proxy-tools.com 等网站的端口被 reCAPTCHA/付费墙保护,免费用户拿不到。替代方案:
- proxyscrape.com 免费 API(无需 key):
https://api.proxyscrape.com/v2/?request=displayproxies&protocol=socks5&timeout=5000&country=ru- protocol 参数:http / socks5 / socks4
- country 参数:ISO 两字母代码,留空=全球
- 返回纯文本
IP:PORT列表
- 免费代理可用率约 5-6%,寿命短(小时~天级别),需定期刷新
已知问题
- lxml 版本冲突:Crawl4AI 要求 lxml~=5.3,Scrapling 要求 lxml>=6.0。实际运行中 lxml 6.x API 向下兼容 5.x,不影响使用。
- Jina Reader 限速:免费版约 20 req/min,可加
X-No-Cache: true绕过缓存(但消耗更快)。大批量用 Crawl4AI 替代。 - CamouFox 启动慢:Firefox 启动比 Chromium 慢约 2-3 秒,session 复用可缓解。
- Scrapling DynamicFetcher 缺依赖:需额外安装
msgspec(pip install msgspec),否则 import 报错。 - curl socks5h/socks4a 不支持:本系统 curl 版本不支持
--proxy socks5h或--proxy socks4a,改用--socks5/--socks4参数代替。 - Scrapling PlayWrightFetcher 已更名:0.4.7 版本中叫
DynamicFetcher,不是PlayWrightFetcher。 - AutoCLI 服务器限制:服务器无 Chrome 桌面环境,浏览器类命令(bilibili、twitter 等需 Cookie 的)不可用;公开 API 命令(hackernews 等)正常。用户本地电脑或 VNC 环境可完整使用。