Scrapling — 自适应爬虫框架,一库到底零妥协 |Github Daily

0 阅读11分钟

GitHub Daily

Scrapling — 自适应爬虫框架,一库到底零妥协

今日 +1,184 Stars | GitHub Trending 热榜

📅 2026-05-07

写过爬虫的开发者都知道这个痛点:**昨天还跑得好好的爬虫,今天网站改版就全挂了。**选择器失效、反爬升级、JS 渲染……每一个都够你折腾半天。传统方案中,requests + BeautifulSoup 速度虽快但扛不住动态网站,Selenium/Playwright 功能强但太重,而 Scrapy 框架又不够灵活。今天的开源主角 Scrapling,用一个框架同时解决了这三个问题——它来自安全研究者 D4Vinci(Karim Shoair),以 46,200+ Stars 登上 GitHub Trending,今日暴涨 +1,184 Stars。

📋 项目速览

项目名称Scrapling

作者D4Vinci (Karim Shoair)

GitHub Stars⭐ 46,200+ (今日 +1,184)

语言Python 3.10+

许可证BSD-3-Clause

测试覆盖率92%

GitHub 地址github.com/D4Vinci/Scrapling

官方文档scrapling.readthedocs.io

💔 它能解决什么问题?

creepy 1:网站一改版,爬虫就报废

传统爬虫依赖硬编码的 CSS/XPath 选择器。网站一旦改版(class 名变了、DOM 结构调整了),选择器全部失效。维护成本极高,尤其是要爬大量网站时。

creepy 2:反爬系统越来越狠

Cloudflare Turnstile、PerimeterX、DataDome……反机器人技术日新月异。简单的 requests 直接被 403,Selenium 也能被指纹识别检测出来。

creepy 3:工具碎片化,方案难统一
  • 静态网站用 requests,动态网站用 Playwright,反爬网站还得加 stealth 插件

  • 不同工具返回不同的响应对象,API 完全不同

  • 大规模爬取还要接入 Scrapy,又是一套体系

🛠 Scrapling 的解法

Scrapling 用**「渐进增强」(Progressive Enhancement)哲学统一一切:同一个 Response 接口,从轻量 HTTP 到浏览器自动化再到隐秘反爬,三级 Fetcher 无缝切换。更关键的是内置自适应解析器**——网站结构变了,它能用相似度算法自动重新定位元素,让你的爬虫「改版免疫」。

✨ 核心亮点深度解析

1. 三级渐进式 Fetcher 体系

Scrapling 的核心设计理念是「按需升级」。不是每个请求都需要开浏览器,也不是每次都要反爬伪装。三级 Fetcher 体系让你根据目标网站灵活选择:

Tier 1

Fetcher / AsyncFetcher轻量 HTTP 请求,模拟浏览器 TLS 指纹 + HTTP/3 支持,速度最快

Tier 2

DynamicFetcher / AsyncDynamicFetcher基于 Playwright 的浏览器自动化,支持 Chromium 和 Chrome,处理 JS 渲染

Tier 3

StealthyFetcher / AsyncStealthyFetcher高级隐秘模式,fingerprint 伪装,自动绕过 Cloudflare Turnstile/Interstitial

关键是:无论你用哪一级 Fetcher,返回的都是同一个 Response 对象(继承自 Selector)。你的解析代码 `.css()` / `.xpath()` 在不同 Fetcher 之间完全通用,无需重写。

2. 自适应解析器 — 网站改版也不怕

这是 Scrapling 最独特的能力。它内置了智能相似度算法,能够「记住」你抓取的元素特征。当网站 DOM 结构改变后,自动重新定位到正确元素:

Python

from
 scrapling.fetchers 
import
 StealthyFetcher
StealthyFetcher
.adaptive = 
True
# 第一次抓取:保存元素签名
p = 
StealthyFetcher
.fetch(
'https://example.com/products'
, headless=
True
) products = p.css(
'.product'
, auto_save=
True
)
# 网站改版后:自动重新定位元素
products = p.css(
'.product'
, adaptive=
True
)  
# 即使 class 名变了也能找到

相比传统方案中 AutoScraper 的相似度匹配(12.45ms),Scrapling 只需 2.39ms——快了 5.2 倍,同时准确率更高。

3. 开箱即用的反机器人绕过

StealthyFetcher 内置了 CDP(Chrome DevTools Protocol)泄露修补、fingerprint 伪装、Cloudflare Turnstile 自动解决等能力。不需要额外安装 undetected-chromedriver 或 playwright-stealth:

Python

from
 scrapling.fetchers 
import
 StealthySession
with
StealthySession
(headless=
True
, solve_cloudflare=
True
) 
as
 session:     
page = session.fetch(
'https://nopecha.com/demo/cloudflare'
)     
data = page.css(
'#padded_content a'
).getall()

4. 完整的 Spider 爬虫框架

不只是请求工具,Scrapling 还内置了类 Scrapy 的完整爬虫框架,支持并发爬取、暂停恢复、多 Session 路由、自动代理轮换等企业级特性:

Python

from
 scrapling.spiders 
import
 Spider, Request, Response
from
 scrapling.fetchers 
import
 FetcherSession, AsyncStealthySession
class
MultiSessionSpider
(
Spider
):     name = 
"multi"
     start_urls = [
"https://example.com/"
]     concurrent_requests = 
10
def
configure_sessions
(self, manager):        
# 快速 HTTP Session 处理普通页面
         manager.add(
"fast"
, 
FetcherSession
(impersonate=
"chrome"
))        
# 隐秘 Session 处理有反爬的页面(懒加载)
         
manager.add(
"stealth"
, 
AsyncStealthySession
(headless=
True
), lazy=
True
)    
async def
parse
(self, response: 
Response
):        
for
 link 
in
 response.css(
'a::attr(href)'
).getall():            
if
"protected"
in
 link:                
yield
Request
(link, sid=
"stealth"
)  
# 路由到隐秘 Session
else
:                
yield
Request
(link, sid=
"fast"
, callback=self.parse)  result = 
MultiSessionSpider
(crawldir=
"./crawl_data"
).start() result.items.to_json(
"output.json"
)

按 Ctrl+C 优雅暂停,下次启动自动从上次中断处继续。这在爬取数万页数据时非常实用。

5. AI 原生 — 内置 MCP Server

Scrapling 是少数内置 MCP(Model Context Protocol)服务器的爬虫框架。安装 AI 扩展后,Claude、Cursor 等大模型可以直接调用 Scrapling 进行结构化数据提取:

Bash

pip install 
"scrapling[ai]"

MCP 服务器会在提取内容后再传递给 AI,减少 token 消耗,提高速度和准确性。

6. 性能碾压级表现

📊 文本提取速度基准测试(5000 个嵌套元素)
排名耗时 (ms)相对速度
1Scrapling
最快
2.02
1.0x
2
Parsel/Scrapy
2.04
1.01x
3
Raw Lxml
2.54
1.26x
4
PyQuery
24.17
~12x
5
Selectolax
82.63
~41x
6
BS4 + Lxml
1,584
~784x
7
BS4 + html5lib
3,392
~1,679x

* 所有基准测试代表 100+ 次运行的平均值

🗺 功能特性全景

🔄智能元素追踪

相似度算法自动重新定位 DOM 变更后的元素,网站改版也不断更你的选择器。

🛡️Cloudflare 绕过

自动解决 Cloudflare Turnstile/Interstitial,无需第三方反检测工具。

🔌统一 Response 接口

三级 Fetcher 返回相同的 Response 对象(继承 Selector),.css() 和 .xpath() 完全通用。

🕷️Spider 爬虫框架

类 Scrapy API,支持并发、暂停恢复、多 Session 路由、自动代理轮换。

🔐DNS 泄漏防护

内置 DNS-over-HTTPS(Cloudflare DoH),使用代理时不会泄露真实 DNS 请求。

🤖MCP AI 集成

内置 MCP Server,Claude/Cursor 等大模型可直接调用 Scrapling 进行结构化数据提取。

🎯广告/域名屏蔽

内置 3,500+ 广告和追踪域名屏蔽,减少无关请求,提高爬取效率。

⚡HTTP/3 + TLS 伪装

Fetcher 模拟 Chrome/Firefox 的 TLS 指纹和请求头,支持 HTTP/3 协议。

🎮 实战场景展示

🏢场景一:电商数据采集

采集多个电商平台的商品价格、评论和库存信息。部分平台有严格的反爬措施(Cloudflare、PerimeterX),部分是纯静态页面。

方案:使用 Spider 框架 + 多 Session 路由。普通页面走 FetcherSession(速度快),有反爬的走 StealthySession。自适应解析器让不同电商的页面模板都能自动适配。

📰场景二:新闻聚合平台

需要从 100+ 新闻网站持续抓取文章标题、摘要和发布时间。网站频繁改版,维护噩梦。

方案:首次运行时使用 auto_save=True 保存元素签名。网站改版后,传递 adaptive=True 即可自动重新定位元素,无需手动修复选择器。

🔬场景三:学术数据采集

从 PubMed、arXiv 等学术平台采集论文元数据。部分页面需要 JavaScript 渲染才能获取完整内容。

方案:使用 DynamicFetcher 处理 JS 渲染页面,Fetcher 处理静态 API 端点。Spider 的 Streaming 模式实时输出采集结果,方便对接下游管道。

🤖场景四:AI Agent 数据管道

为 Claude、GPT 等 AI Agent 提供实时网页数据。需要结构化提取、低延迟、减少 token 消耗。

方案:启用 Scrapling MCP Server,AI Agent 直接调用 Scrapling 进行定向内容提取,只传递需要的结构化数据给模型,大幅降低 token 使用。

🚀 上手指南

安装

Bash

# 基础安装(仅解析器引擎)
pip install scrapling
# 完整安装(含 Fetcher + 浏览器依赖)
pip install 
"scrapling[fetchers]"
scrapling install
# 安装所有功能(含 AI + Shell)
pip install 
"scrapling[all]"
# 或使用 Docker(开箱即用,浏览器已预装)
docker pull pyd4vinci/scrapling

快速上手

30 秒快速抓取:用 Fetcher 发送一个 HTTP 请求,用熟悉的 CSS 选择器提取数据。遇到 JS 渲染页面?:把 Fetcher 换成 DynamicFetcher,其他代码不变。遇到 Cloudflare 反爬?:换成 StealthyFetcher,一行代码自动绕过。网站改版了?:加上 adaptive=True,自适应解析器自动修复选择器。需要大规模爬取?:用 Spider 框架,支持并发、暂停恢复、代理轮换。

Python — 三行代码从入门到实战

from
 scrapling.fetchers 
import
 Fetcher
# 静态页面:直接 GET + CSS 选择器
page = 
Fetcher
.get(
'https://quotes.toscrape.com/'
) quotes = page.css(
'.quote .text::text'
).getall()
# ['"The world as we have created it..."', '"It is our choices..."', ...]
# 动态页面:换成 DynamicFetcher
from
 scrapling.fetchers 
import
 DynamicFetcher 
page = 
DynamicFetcher
.fetch(
'https://example.com/dynamic'
, headless=
True
) 
data = page.xpath(
'//div[@class="content"]'
).getall()
# 反爬页面:换成 StealthyFetcher
from
 scrapling.fetchers 
import
 StealthyFetcher 
page = 
StealthyFetcher
.fetch(
'https://protected-site.com'
) data = page.css(
'.data-row'
).getall()

无代码抓取(CLI 模式)

Scrapling 提供了终端命令行工具,无需写 Python 代码即可完成抓取:

Bash

# 提取页面内容并保存为 Markdown
scrapling extract get 
'https://example.com'
 content.md
# 使用 CSS 选择器定向提取
scrapling extract get 
'https://example.com'
 products.txt \   --css-selector 
'.product-item'
 --impersonate chrome
# 反爬页面提取
scrapling extract stealthy-fetch 
'https://protected.com'
 data.html \   --css-selector 
'#main-content'
 --solve-cloudflare

Fetchers 与 Sessions 对照

用途一次性请求Session 持久化Async Session
HTTP 请求
FetcherFetcherSessionFetcherSession
上下文感知
反爬绕过
StealthyFetcherStealthySessionAsyncStealthySession
浏览器自动化
DynamicFetcherDynamicSessionAsyncDynamicSession

⚖️ 与主流方案对比

能力ScraplingScrapyBeautifulSoupPlaywright
自适应元素定位
内置
反爬绕过
内置需插件部分
JS 渲染
内置需集成核心能力
统一 Response 接口
仅 HTTP仅解析仅浏览器
暂停/恢复
内置需扩展
AI/MCP 集成
内置
文本提取性能
2.02ms2.04ms1,584ms
N/A

📝 今日总结

Scrapling 的核心价值

Scrapling 用**「渐进增强」+「自适应解析」+「统一接口」**三大设计理念,重新定义了 Python 爬虫框架应该有的样子。它不是一个简单的 requests 封装,也不是 Playwright 的套壳,而是一个从设计层面思考了「爬虫开发全生命周期痛点」的完整解决方案。

最适合这些场景:

• 需要长期维护的爬虫项目(自适应解析减少维护成本)• 需要同时处理静态/动态/反爬网站(三级 Fetcher 统一接口)• 需要为 AI Agent 提供实时网页数据(内置 MCP Server)• 从零开始学习爬虫的新手(CLI 模式零代码上手)

💬 **你觉得 Scrapling 最打动你的功能是哪个?**自适应解析?开箱反爬?还是 MCP AI 集成?欢迎在评论区分享你的看法 👇

GitHub Daily · 每天一个值得深读的开源项目

往期文章:

CocoIndex:给 AI Agent 装上「实时记忆」|首个专为 Long-Horizon Agent 设计的增量数据引擎|Github Daily

browserbase/skills:给你一双眼,为 Claude Agent 提供网页浏览能力的 SDK,封装了浏览器自动化、截图、DOM 交互等能力|Github Daily

Ruflo:多智能体编排平台让 Claude Code 变身智能体团队,协同作战

金融 AI 革命:TradingAgents 用多智能体重新定义量化交易

n8n:AI 原生工作流自动化平台,让代码与低代码完美融合|Github Daily

OpenAI Symphony:让 AI 代理自己干活,你只管往 Linear 看板扔任务, AI 自动认领、自动执行、自动验证|OpenAI 出品 |Github Daily

GitNexus:为零服务器时代的代码智能而生 |为 AI Agent 构建完整的代码知识图谱|真正"理解"你的代码库结构|Github Daily

要么绑死在 Anthropic、要么月费不便宜, 于是一个问题在 GitHub 上发酵——有没有开源的 Claude Code 替代品|OpenCode |Github Daily

微软 VibeVoice:AI 声音终于有了「情绪」|Github Daily

TypeScript 大神的 AI 编程秘籍:21 个经过实战打磨的 Agent Skills,今日 +2500 Stars|Github Daily

TileKernels:DeepSeek 用 Python写出逼近硬件极限的 GPU 算子库 |Github Daily

你的团队,缺一个永不请假的 ML 实习生 ml-intern,Hugging Face出品|Github Daily

「长脑子」的 AI Agent:Hermes Agent 如何让 AI 越用越聪明 |Github Daily

DeepGEMM:300行代码重构FP8矩阵运算,再掀AI算力革命 |GitHub Daily · 第13期

GitHub Daily · 第13期 |用 WiFi 信号"看穿"墙壁——RuView 让感知无处不在

GitHub Daily · 第12期 RustDesk远程桌面商业软件的理想替代品

GitHub Daily · 第11期 Omi你的第二大脑,让AI记住一切

GitHub Daily · 第10期 Evolver 让 AI Agent 拥有"基因系统",自我反思、自我改进、自我进化

GitHub Daily · 第09期  AI SRE Agent,OpenSRE自动完成生产事故的调查与响应

GitHub Daily · 第08期 | tldraw - 无限画布 React SDK 深度解析

GitHub Daily 第07期  GenericAgent:自我进化的AI Agent:从3K行代码生长出专属技能树

GitHub Daily · 第06期 — Cognee:让AI拥有持久记忆的知识引擎

GitHub Daily · 第04期 — Kronos

GitHub Daily 第03期 Scrapling

GitHub Daily · 第02期 — MarkItDown

GitHub Daily · 第1期 | Voicebox - 开源语音合成工作站