返回项目

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 更轻:

python
from 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 参数启用:

python
QuotesSpider(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 或数据合作

安装

bash
pip install scrapling

# 或使用 uv
uv pip install scrapling

# 浏览器模式需额外安装
playwright install chromium

也提供官方 Docker 镜像,内置浏览器环境:

bash
docker pull d4vinci/scrapling:latest

合规提示

抓取公开数据前请确认目标站点的 robots.txt 和服务条款,涉及个人信息的场景请严格遵循相关法规。

语言

Python

分类

AI自动化

许可证

BSD-3-Clause

更新时间

4/11/2026

标签

crawlerscrapingplaywrightcloudflare-bypassstealthasyncmcpai-automationadaptive
~/安装方式

# source

$pip install scrapling
$uv pip install scrapling
$playwright install chromium

# usage

$from scrapling.fetchers import Fetcher; Fetcher.get('https://example.com')
$from scrapling.fetchers import StealthySession
$from scrapling.spiders import Spider, Response
Scrapling | 资讯狗 | Zixungou