D4Vinci/Scrapling · 上手攻略
- 仓库:D4Vinci/Scrapling
- 链接:https://github.com/D4Vinci/Scrapling
- 分类:engineering / web-scraping
- 作者:Tom
- 更新:2026-07-05
这是什么
Scrapling 是一个自适应 Python 爬虫框架,设计目标是一个库解决从简单单次请求到大规模生产级爬取的全部场景。它的核心差异化在于两点:
- 自适应解析——页面结构变化后,Scrapling 能自动重新定位目标元素,不必重写抓取规则。
- 隐身抓取——内置多款 Fetcher,开箱即用绕过 Cloudflare Turnstile 等反爬机制,无需手动配置代理或浏览器指纹。
官方喊出"One library, zero compromises"(一个库,零妥协),定位介于 Requests + BeautifulSoup 的轻量组合和 Scrapy 全框架之间,但比两者都更现代化。
能解决什么问题
- 反爬网站(Cloudflare、Turnstile、DataDome 等)无法直接爬
- 页面频繁改版,CSS 选择器写完没几天就失效
- 需要大规模并发爬取,且要暂停/恢复、断点续爬
- 想用 Python 但不想处理 Selenium/Playwright 的浏览器启动开销
- 需要MCP 工具让 AI Agent 直接调用爬虫
快速安装
pip install scrapling
按需安装额外依赖:
# 异步支持
pip install scrapling[async]
# Playwright 动态渲染支持(较慢但更稳)
pip install scrapling[playwright]
# 所有可选依赖
pip install scrapling[all]
⚠️ 注意:Scrapling 依赖 Python ≥ 3.9。某些 Linux 发行版(如 Ubuntu 24.04)如遇 Chromium sandbox 问题,见 官方文档 Apparmor 部分。
核心用法
1. 基础抓取(StealthyFetcher)
绕过反爬最常用的 Fetcher,支持无头浏览器级隐身:
from scrapling.fetchers import StealthyFetcher
StealthyFetcher.adaptive = True
page = StealthyFetcher.fetch(
'https://example.com/products',
headless=True,
network_idle=True # 等网络空闲再抓
)
# 用 CSS 选择器提取,auto_save=True 开启自适应
products = page.css('.product', auto_save=True)
for product in products:
print(product.css('h2::text').get())
print(product.css('.price::text').get())
⚠️
headless=True首次会下载 Chromium(约 150 MB),需耐心等待。
2. 自适应解析(adapative=True)
如果页面改版导致选择器失效,再次抓取时加 adaptive=True,Scrapling 会用之前保存的结构信息重新定位:
# 某次抓取时用 auto_save=True 保存了结构
products = page.css('.product', auto_save=True)
# 后续网站改版后,加上 adaptive=True 自动重定位
products = page.css('.product', adaptive=True)
⚠️ 自适应功能的准确性尚未有大面积生产验证,建议先用小流量测试,确认重定位结果正确后再全量使用。
3. 其他 Fetcher 类型
| Fetcher | 适用场景 |
|---|---|
Fetcher |
基础同步 HTTP,简单快速 |
AsyncFetcher |
异步并发请求,高吞吐量 |
DynamicFetcher |
JavaScript 渲染页面(无头浏览器) |
StealthyFetcher |
隐身模式,绕过反爬 |
from scrapling.fetchers import Fetcher, AsyncFetcher, DynamicFetcher
# 简单页面
p = Fetcher.fetch('https://example.com')
# 异步并发(配合 asyncio)
import asyncio
from scrapling.fetchers import AsyncFetcher
async def crawl():
pages = await AsyncFetcher.fetch_all([
'https://example.com/1',
'https://example.com/2',
])
return pages
4. Spider 框架(大规模爬取)
from scrapling.spiders import Spider, Response
class MySpider(Spider):
name = "demo"
start_urls = ["https://example.com/"]
async def parse(self, response: Response):
# 提取当前页
for item in response.css('.product'):
yield {
"title": item.css('h2::text').get(),
"price": item.css('.price::text').get(),
}
# 翻页follow
next_page = response.css('a.next::href').get()
if next_page:
yield response.follow(next_page)
MySpider().start()
内置:并发控制、暂停/恢复、自动重试、User-Agent 轮换、自动代理轮转。
5. CLI 命令行
# 安装CLI后
pip install scrapling[cli]
# 单次抓取并输出 JSON
scrapling fetch https://example.com --selector '.title' --format json
# 启动本地 MCP 服务器(供 AI Agent 调用)
scrapling mcp
6. MCP 服务器(AI Agent 集成)
Scrapling 提供 MCP 协议工具端,AI Agent 可直接调用:
scrapling mcp
# 默认监听 localhost:8080
⚠️ MCP 服务器没有内置认证,生产环境部署时需自行加一层网络隔离或认证层。
典型适用场景
| 场景 | 推荐 Fetcher |
|---|---|
| 简单公开页面,单次抓取 | Fetcher |
| 竞品价格监控,高并发 | AsyncFetcher |
| Cloudflare/Stripe 保护站点 | StealthyFetcher |
| React/SPA 等 JS 渲染页面 | DynamicFetcher |
| 整站结构化爬取,有翻页 | Spider 框架 |
| AI Agent 自动化工作流 | MCP 服务器 |
坑与注意
- Chromium 下载:StealthyFetcher 默认 headless 模式需下载 Chromium,约 150 MB。在某些 CI 环境(如 Docker Linux)需额外配置
--no-sandbox或调整 Apparmor 策略。 - adaptive 精度:自适应重定位功能尚属较新,生产环境建议配合 assert/校验逻辑使用,避免误定位导致数据错误。
- 反爬升级:Scrapling 的隐身能力基于当前的浏览器指纹和代理策略,反爬系统持续升级,某些高强度站点(如 Stripe、AWS 管理后台)仍可能触发验证。
- 性能:StealthyFetcher 和 DynamicFetcher 基于无头浏览器,性能比纯 HTTP 低 10-100 倍,仅用于绕过反爬的场景,公开页面不要滥用。
- 许可:BSD-3-Clause,商业使用友好,但内置的代理服务商广告(Proxidize、Evomi 等)为第三方服务,使用前请核实其合规性。
与同类对比
| 特性 | Scrapling | Playwright / Puppeteer | Scrapy |
|---|---|---|---|
| 反爬绕过 | ⭐⭐⭐⭐⭐ 内置隐身 | ⭐⭐⭐ 需手动配置 | ⭐⭐ 靠第三方 |
| 自适应解析 | ⭐⭐⭐⭐ 元素重定位 | ❌ 无 | ❌ 无 |
| 学习成本 | 低,Pythonic | 中 | 高(异步 + Twisted) |
| JS 渲染 | ✅ DynamicFetcher | ✅ 原生支持 | ❌ 需 Splash |
| Spider 框架 | ✅ 内置 | ❌ 需自搭调度 | ✅ 全功能 |
| MCP 支持 | ✅ 原生 | ❌ | ❌ |
| 适用规模 | 中小型生产 | 测试/小爬虫 | 大型分布式 |
结论:如果主要痛点是反爬网站无法直接爬,Scrapling 是当前 Python 生态最省心的选择;如果需要完整的分布式爬虫调度、IP 代理池管理,Scrapy 生态更成熟。
一句话推荐
反爬网站的克星:一个 Python 库把隐身抓取、自适应解析和 Spider 调度全打包,绕过 Cloudflare Turnstile 开箱即用,值得加入技术栈。