Scrapling:56k 星的 Python 爬虫框架,能自动适应网站结构变化
概览
Scrapling 是一个 Python Web 爬虫框架,从单次请求到全站爬取一条龙。56,841 GitHub Star,BSD-3-Clause 开源。
项目地址:https://github.com/D4Vinci/Scrapling 文档:https://scrapling.readthedocs.io/
一句话定位:一个库搞定从解析到抓取到并发爬取的所有需求,零妥协。
核心亮点:自适应解析器
Scrapling 最有特色的功能是它的自适应解析器。
正常爬虫最头疼的事情:辛辛苦苦写好了选择器,网站改了个版,所有规则全部失效,代码跑断。
Scrapling 的解法是 auto_save + adaptive 机制:
from scrapling.fetchers import StealthyFetcher
# 首次抓取:保存元素的"指纹"
p = StealthyFetcher.fetch('https://example.com')
products = p.css('.product', auto_save=True)
# 后来网站改版了,传入 adaptive=True
# Scrapling 会自动根据保存的指纹重新定位元素
products = p.css('.product', adaptive=True)
auto_save=True 会保存元素的结构特征、位置关系、属性模式等多种”指纹”。当网站结构发生变化时,adaptive=True 会用这些指纹在更新的 DOM 中重新定位元素。
对于定时运行的爬虫任务,这个功能意味着不用每次网站改版都改代码。
四种 Fetcher
Scrapling 提供了四种不同级别的抓取器:
| Fetcher | 用途 | 特点 |
|---|---|---|
| Fetcher | 基础同步请求 | 最轻量,适合简单页面 |
| AsyncFetcher | 异步并发请求 | 高性能,适合批量抓取 |
| StealthyFetcher | 绕过反爬 | Cloudflare Turnstile 开箱绕过,headless 模式 |
| DynamicFetcher | JavaScript 渲染 | 需要浏览器渲染的动态页面 |
其中 StealthyFetcher 是最常用的——它内置了浏览器指纹伪装和反检测机制,能绕过大多数常见的反爬系统。
Spider 框架:扩展到全站并发爬取
Scrapling 的 Spider 框架构建在异步之上,支持并发、多会话爬取、暂停/恢复、自动代理轮换:
from scrapling.spiders import Spider
class MySpider(Spider):
name = "demo"
start_urls = ["https://example.com/products"]
async def parse(self, response):
for item in response.css('.product'):
yield {
"title": item.css('h2::text').get(),
"price": item.css('.price::text').get(),
}
# 自动跟踪分页链接
next_page = response.css('.next::attr(href)').get()
if next_page:
yield response.follow(next_page)
MySpider().start()
这个架构和 Scrapy 类似,但更轻量、更现代(原生 async/await)。配合代理轮换和并发控制,一个脚本就能完成中小规模的数据采集。
AI Agent 集成:MCP Server
Scrapling 内置了 MCP(Model Context Protocol)服务器,这意味着 AI Agent 可以直接通过 MCP 调用 Scrapling 来执行网页抓取任务。
对于在 AI 编程环境中使用 Scrapling,项目还提供了 Agent Skill 目录和 OpenClaw 支持。AI Agent 可以通过自然语言描述目标,Scrapling 自动完成抓取和解析。
安装与快速上手
安装极其简单:
pip install scrapling
最小可工作示例——单次抓取:
from scrapling.fetchers import StealthyFetcher
# 一行代码完成抓取+解析
p = StealthyFetcher.fetch(
'https://example.com',
headless=True,
network_idle=True
)
# CSS 选择器提取
title = p.css('h1::text').get()
links = p.css('a::attr(href)').all()
解析引擎也支持 XPath 选择器,并且内置了一些便利方法——比如 .css() 和 .xpath() 返回的对象支持链式调用和多种提取方式。
技术架构
Scrapling 的设计遵循模块化原则:
scrapling/
├── fetchers/ # 四种抓取器(Fetcher、AsyncFetcher、StealthyFetcher、DynamicFetcher)
├── parser/ # 自适应解析引擎(auto_save / adaptive 核心逻辑)
├── spiders/ # 并发爬虫框架(Spider)
├── selector/ # CSS/XPath 选择器
├── cli/ # 命令行工具
└── mcp_server/ # MCP 协议支持(AI Agent 集成)
每个模块可以独立使用。如果你只需要解析和选择器,只装核心包就行——Fetcher 相关的依赖是可选的。
适用场景
| 场景 | 推荐方案 |
|---|---|
| 单页数据提取 | StealthyFetcher + CSS 选择器 |
| 定时监控(网站经常改版) | 加上 auto_save=True + adaptive=True |
| 中小规模站点头 | Spider 框架 + AsyncFetcher |
| AI Agent 需要抓网页 | MCP Server 集成 |
| 需要绕过 Cloudflare 等反爬 | StealthyFetcher 开箱即用 |
生态与链接
- GitHub: https://github.com/D4Vinci/Scrapling
- 文档: https://scrapling.readthedocs.io/
- PyPI:
pip install scrapling - 许可证: BSD-3-Clause
总结
Scrapling 在 56k 星这个体量上,已经证明了它解决了真实痛点。其自适应解析器是当前开源爬虫框架中比较少见的创新——大部分框架的解法是”网站改了你自己改选择器”,Scrapling 的解法是”我帮你记住元素长什么样,你自己去找”。
其他功能(反爬绕过、并发爬取、MCP 集成)虽然各有同类竞品,但全部集成在一个库里、一条 pip install 搞定,这个打包策略降低了使用门槛。
对我来说,如果做一个需要长期运行的爬虫任务,adaptive 机制本身就值得优先考虑——省掉的不只是每次网站改版后的修代码时间,还有因为你没注意到改版而导致的静默数据损坏。
对比竞品:
- Scrapy:更成熟,生态更丰富,适合大规模爬取,但配置重、学习曲线陡
- Playwright/Puppeteer:浏览器自动化更强,但不专为爬虫设计,缺解析优化
- Requests + BeautifulSoup:经典组合,轻量但缺很多高级功能
- Scrapling:在轻量和功能之间取得了不错的平衡点