Scrapling
如长期运行的爬虫总被目标站改版搞废选择器,或绕 Cloudflare 要反复拼 stealth 胶水,可以采用这个仓库。
Scrapling 是一个 Python 爬虫框架,把 HTTP 快请求、隐身浏览器、完整 Playwright 三种抓取方式统一到同一套 API。主要面向已经写过爬虫、需要同时处理反反爬和长期维护成本的工程师。
相对同类框架,它最具差异化的能力是自适应选择器:第一次抓取时记录元素指纹,之后遇到站点改版、原 selector 失效时,会基于指纹自动重新定位元素,不需要人工修改代码。
三层会话架构
三种 fetcher 对应不同量级的抓取需求,用法一致,同一项目里可以混用:
python# 普通 HTTP,走 TLS 指纹伪装,覆盖大多数公开站点 from scrapling.fetchers import Fetcher page = Fetcher.get("https://example.com", impersonate="chrome") # 隐身浏览器,内置 Cloudflare Turnstile 自动处理 from scrapling.fetchers import StealthySession with StealthySession(headless=True, solve_cloudflare=True) as session: page = session.fetch("https://target.com") # 完整 Playwright,处理需要 JS 渲染的单页应用 from scrapling.fetchers import DynamicFetcher page = DynamicFetcher.fetch("https://spa-app.com")
Fetcher.impersonate="chrome" 会用 httpx 级别的速度发送带真实 TLS 指纹的请求,在大多数非交互场景下不需要真正启动浏览器。
自适应选择器
长期维护的爬虫最常见的故障原因是站点改版:Twitter 换字段名、B 站 DOM 重构、小红书改 class 名,selector 一批批失效。传统做法是人工排查、修改代码、重新部署。
Scrapling 的做法是首次抓取时存储一份元素特征(class 名、DOM 位置、兄弟节点、文本特征),后续运行时如果原 selector 匹配不到,用指纹做相似度匹配并自动重定位。开关只有两个参数:
python# 首次抓取时记录指纹 page.css(".old-class", auto_save=True) # 后续运行时允许自动重定位 page.css(".old-class", adaptive=True)
对于长期运行的采集任务,这个机制直接降低了因站点改版导致的维护工作量。
Spider API
相对 Scrapy 的多文件样板(settings.py、pipelines.py、items.py、middlewares.py),Scrapling 的 Spider 更轻:
pythonfrom scrapling.spiders import Spider, Response class QuotesSpider(Spider): name = "quotes" start_urls = ["https://quotes.toscrape.com/"] concurrent_requests = 10 async def parse(self, response: Response): for quote in response.css(".quote"): yield { "text": quote.css(".text::text").get(), "author": quote.css(".author::text").get(), } result = QuotesSpider().start() result.items.to_json("quotes.json")
没有外部配置文件,并发数作为类属性定义,导出 JSON 只需一行 to_json()。
断点续爬通过 crawldir 参数启用:
pythonQuotesSpider(crawldir="./crawl_data").start()
任务被 Ctrl+C 中断后,下次用同一目录启动会从断点继续,不需要从头重跑,适合大规模抓取任务。
与 LLM / Agent 的集成
Scrapling 自带一个 MCP Server,可以直接挂到 Claude Code、Cursor 等支持 MCP 的 AI 工具里调用。
一个常见的配合模式是:不把整页 HTML 直接扔给模型,而是先用 Scrapling 的选择器精确抽出目标字段,把结构化的小块数据送进 context。相比让模型自己从 HTML 里定位元素,这种方式可以将单页 token 消耗降低一到两个数量级,同时避免上下文被截断。
对 Agent 项目来说,"抓取一个网页"是最常见的原子能力之一,通过 MCP 接入之后不需要在 Agent 编排层重复实现 HTTP 中间层。
适用场景
- 长期运行的数据采集任务,希望降低站点改版带来的维护成本
- 需要同时处理多种抓取模式(HTTP / Stealth / Dynamic)的项目
- 作为 Agent 或 LLM 工作流里的网页抓取组件
- 对 Cloudflare、TLS 指纹等反反爬场景有明确需求的抓取任务
不适用场景
- 一次性抓取单个接口,
httpx.get()就能满足,不需要引入完整框架 - 数据位于需要登录的内网系统,Scrapling 的能力主要围绕公开站点的反反爬
- 反爬强度极高且商业价值高的目标站点,任何通用框架都难以对抗专门的安全团队,这类场景应优先考虑官方 API 或数据合作
安装
bashpip install scrapling # 或使用 uv uv pip install scrapling # 浏览器模式需额外安装 playwright install chromium
也提供官方 Docker 镜像,内置浏览器环境:
bashdocker pull d4vinci/scrapling:latest
合规提示
抓取公开数据前请确认目标站点的 robots.txt 和服务条款,涉及个人信息的场景请严格遵循相关法规。
语言
Python
分类
AI自动化
许可证
BSD-3-Clause
更新时间
4/11/2026
标签