多 多宝库

Scrapling 自适应网页抓取框架

GitHub 开源 Python WindowsmacOSLinux ★ 8.49万 BSD-3-Clause
Scrapling 自适应网页抓取框架

GitHub 8.4 万 star 的 Python 抓取框架。普通 HTTP、真实浏览器、隐身反爬三种模式;网站改版后还能自动重新定位元素。不写代码也能用命令行把网页存成 Markdown。

作者
D4Vinci
版本
0.4.15
源码
查看仓库 ↗
主页
打开主页 ↗

DOWNLOAD下载地址

  • 站内直链 Scrapling 自适应网页抓取框架 · 完整源码包 2.4 MB
  • 站内直链 Scrapling 自适应网页抓取框架 · 一键安装工具包(含 Windows 脚本) 8 KB windows,macos,linux
  • GitHub 发布 GitHub 仓库(查看源码 / 提交反馈)

站内直链无需提取码,点击即可下载。

INTRO项目介绍

这是什么

Scrapling 是一个 Python 的自适应网页抓取框架,作者 D4Vinci。GitHub 上 8.4 万 star,BSD-3-Clause 协议,可商用。

说人话:把「抓网页」这件事从「写一堆请求代码 + 跟反爬系统斗智斗勇」,压缩成几行 Python。

它有三个层次,你可以只用最浅的那层,也可以一路用到最深:

  • 解析器 —— 拿来当 BeautifulSoup / lxml 的替代品,速度更快
  • Fetcher —— 三种取数方式:普通 HTTP、真实浏览器、隐身浏览器(反爬绕过)
  • Spider —— 完整的爬虫框架:并发、断点续爬、代理轮换、自动限速

它最特别的地方:自适应

这是 Scrapling 区别于其他所有抓取库的能力。

普通爬虫最怕目标网站改版——昨天 .product 还能选到,今天改成了 .item-card,脚本就废了。Scrapling 的解析器会记住元素的特征,改版后你用 adaptive=True 再查一次,它会自动把元素重新找回来。

page.css('.product', auto_save=True)      # 第一次抓,把元素特征存下来
page.css('.product', adaptive=True)       # 网站改版后,元素自动重新定位

三种取数方式,按需要选

  • 普通 HTTP —— 快。模拟真实浏览器的 TLS 指纹和请求头,支持 HTTP/3。适合大多数静态页面
  • 动态加载 —— 用真实的 Chromium 跑 JavaScript,适合内容靠 JS 渲染的页面
  • 隐身模式 —— 带指纹伪装,可直接过 Cloudflare Turnstile / Interstitial,不用手写绕过逻辑
from scrapling.fetchers import Fetcher, DynamicFetcher, StealthyFetcher

不写代码也能用

装了命令行功能后,一条命令就能把网页抓下来存成 Markdown、纯文本或 HTML:

scrapling extract get 'https://example.com' content.md
scrapling extract stealthy-fetch 'https://目标站' out.html --solve-cloudflare

输出文件后缀决定格式:.md 存 Markdown(适合喂给 AI),.txt 存纯文本,.html 存原始 HTML。

还有个交互式 IPython Shell(scrapling shell),能把 curl 请求一键转成 Scrapling 请求。

对 AI 这一侧的支持

  • MCP 服务器 —— 让 Claude / Cursor 这类 AI 工具直接通过 Scrapling 抓网页,交给模型前会先剥掉提示词注入内容
  • 官方 Agent Skill —— 让 AI 写 Scrapling 代码时按当前 API 写,而不是猜
  • page.markdown() —— 一行把任意页面转成干净的、可供大模型直接使用的 Markdown,构建 RAG 语料很方便

性能

官方基准测试(5000 个嵌套元素提取,100+ 次平均):

  • Scrapling —— 1.99 ms(基准,1.0x)
  • Parsel / Scrapy —— 2.06 ms(1.04x)
  • 原生 lxml —— 2.56 ms(1.29x)
  • BeautifulSoup + lxml —— 1562 ms(约 785 倍慢)

自适应元素查找(网站改版后重新定位)比同类方案 AutoScraper 快约 5.5 倍。

适合谁

  • 要写数据采集脚本的 Python 开发者
  • 被 Cloudflare 之类的反爬系统挡住、又不想自己写绕过逻辑的人
  • 想把网页批量转成干净 Markdown 喂给 AI 的人
  • 只想抓一两个页面、不想写代码的人(用命令行就够)

安装门槛

需要 Python 3.10 或更高版本。核心库只是一行 pip install scrapling;要用浏览器相关的功能,再装 [fetchers] 并执行一次 scrapling install 下载浏览器内核。完整步骤见本站的安装教程。

使用边界

工具本身是中性的,请遵守目标网站的 robots.txt 与用户协议,不要用于高频冲击、绕过登录抓取非公开数据等行为。上游仓库也因此提供了 robots_txt_obey 选项和 AutoThrottle 自动限速。

关于授权

上游采用 BSD-3-Clause 协议,允许免费使用、修改、商用,保留版权声明即可。本页为中文整理说明,源码版权归原作者 D4Vinci 所有。

GUIDE安装与使用教程

安装前准备

  • Python 3.10 或更高版本(本文实测环境是 Python 3.13.14)
  • 一个能正常联网的环境,用来下载依赖
  • 会打开命令行:Windows 用 PowerShell 或 CMD,macOS 用「终端」,Linux 任意终端

Scrapling 的功能分几层,可以用多少装多少:

  • pip install scrapling —— 只有解析器,可以当 BeautifulSoup 用
  • pip install "scrapling[fetchers]" —— 三种 Fetcher + Spider 爬虫框架
  • pip install "scrapling[shell]" —— 命令行工具和交互式 Shell
  • pip install "scrapling[ai]" —— MCP 服务器,给 AI 工具用
  • pip install "scrapling[rag]" —— 构建 RAG 语料
  • pip install "scrapling[all]" —— 全部功能,推荐直接装这个

> 只装 scrapling 的话,from scrapling.fetchers import Fetcher 会报 ModuleNotFoundError——这是最常见的新手坑。

第 1 步 · 确认 Python 环境

python --version && pip --version

第 1 步 · 确认 Python 版本,两个版本号都出来就没问题
第 1 步 · 确认 Python 版本,两个版本号都出来就没问题

如果提示 python 不是内部或外部命令,或者版本低于 3.10:

1. 打开 python.org 下载最新版 Python

2. Windows 安装时务必勾选 Add python.exe to PATH(这一步漏了后面全是坑)

3. 装完关掉命令行窗口重新开一个,再执行上面的命令

第 2 步 · 安装 Scrapling

pip install "scrapling[all]" -i https://mirrors.aliyun.com/pypi/simple/

第 2 步 · 安装 Scrapling,最后一行出现 Successfully installed 就成功了
第 2 步 · 安装 Scrapling,最后一行出现 Successfully installed 就成功了

几个说明:

  • 引号不能省。"scrapling[all]" 在 Linux / macOS 上不写引号会被 shell 当成通配符展开
  • -i https://mirrors.aliyun.com/pypi/simple/ 是让 pip 走国内镜像。不加也能装,只是慢很多——实测不加镜像时下载速度只有约 55 KB/s,光 playwright 一个包就 38.6 MB
  • 本次一共装上了 63 个依赖包,包括 playwright、patchright、curl_cffi、mcp、IPython

第 3 步 · 验证安装

scrapling --version

第 3 步 · 能打印版本号说明命令行装好了
第 3 步 · 能打印版本号说明命令行装好了

再确认三种 Fetcher 都能导入:

python -c "from scrapling.fetchers import Fetcher, DynamicFetcher, StealthyFetcher; print('OK')"

能打印 OK 就没问题了。

第 4 步 · 不写代码,一条命令抓网页

这是最省事的功能。不用写任何 Python,直接从终端把网页抓下来:

scrapling extract get "https://quotes.toscrape.com" quotes.md

第 4 步 · 一条命令把网页存成 Markdown
第 4 步 · 一条命令把网页存成 Markdown

输出文件的后缀决定存什么格式:

  • .md —— 转成干净的 Markdown(适合喂给 AI)
  • .txt —— 只要纯文本
  • .html —— 原始 HTML 内容

还可以直接指定要抓的区块:

scrapling extract get "https://quotes.toscrape.com" quotes.txt --css-selector '.quote .text'

需要跑 JavaScript 的页面改用 fetch,反爬严格的站点用 stealthy-fetch:

scrapling extract fetch "https://example.com" out.md --no-headless
scrapling extract stealthy-fetch "https://目标站" out.html --solve-cloudflare

第 5 步 · 用 Python 抓数据

新建一个 demo.py:

from scrapling.fetchers import Fetcher

page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()
print("抓到名言条数:", len(quotes))
print("第一条:", quotes[0][:60])
print("标题:", page.css('title::text').get())

运行:

python demo.py

第 5 步 · Python API 抓取,10 条全部拿到
第 5 步 · Python API 抓取,10 条全部拿到

选择器的写法和 BeautifulSoup 基本一致,::text 和 ::attr(href) 这类伪元素沿用了 Scrapy / Parsel 的习惯。

第 6 步 · 动态页面与反爬绕过

三种 Fetcher 按难度递增,按需要选:

  • Fetcher —— 普通 HTTP 请求,最快。模拟真实浏览器的 TLS 指纹和请求头,支持 HTTP/3
  • DynamicFetcher —— 启动真实浏览器跑 JavaScript,抓 JS 渲染出来的内容
  • StealthyFetcher —— 指纹伪装的高级隐身模式,能直接过 Cloudflare Turnstile / Interstitial
from scrapling.fetchers import DynamicFetcher

page = DynamicFetcher.fetch('https://quotes.toscrape.com/js/', headless=True)
print("JS 渲染后抓到的名言条数:", len(page.css('.quote .text::text').getall()))

第 6 步 · 动态页面也能抓到 10 条
第 6 步 · 动态页面也能抓到 10 条

省掉几百 MB 的浏览器内核下载

官方推荐跑一次 scrapling install 下载自带的浏览器,但 Chromium + Firefox 体积有 400MB 以上,国内下载很慢。

如果你电脑上已经装了 Chrome / Edge,可以直接复用,省掉这一步:

from scrapling.fetchers import DynamicFetcher

CHROME = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
page = DynamicFetcher.fetch('https://example.com', executable_path=CHROME)

macOS 上是 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome。本文的实测截图就是这么跑的——用本机已有的 Chromium,动态页面和隐身模式都正常工作(隐身模式 4.9 秒抓到 10 条)。

真的需要下载自带浏览器时:

scrapling install

第 7 步 · 全站爬取(Spider 框架)

要抓的不止一个页面时,用 Spider。它和 Scrapy 的写法很像,但支持异步:

from scrapling.spiders import Spider, Response

class QuotesSpider(Spider):
    name = "quotes"
    start_urls = ["https://quotes.toscrape.com/"]
    concurrent_requests = 2
    download_delay = 0.5

    async def parse(self, response: Response):
        for el in response.css('.quote'):
            yield {
                "text": el.css('.text::text').get(),
                "author": el.css('.author::text').get(),
            }

result = QuotesSpider().start()
result.items.to_json("quotes.json")
print("抓到条目数:", len(result.items))

第 7 步 · Spider 爬取,10 条 1.83 秒跑完
第 7 步 · Spider 爬取,10 条 1.83 秒跑完

Spider 还提供了这些能力:

  • 断点续爬 —— 按 Ctrl+C 优雅退出,重启后从上次的位置继续
  • AutoThrottle 自动限速 —— 根据目标网站响应速度自动调整延迟,被限流时自动降速
  • 代理轮换 —— 内置 ProxyRotator,支持轮询和自定义策略
  • robots.txt 合规 —— 设置 robots_txt_obey = True 即自动遵守
  • 开发模式 —— 首次运行缓存响应,之后直接回放,调 parse() 时不用反复请求目标站
  • 现成模板 —— CrawlSpider、SitemapSpider、XMLFeedSpider、CSVFeedSpider、ShopifySpider

第 8 步 · 自适应抓取(Scrapling 的独门功能)

普通爬虫最怕网站改版。Scrapling 可以记住元素特征,改版后自动找回来:

page.css('.product', auto_save=True)      # 第一次抓,把元素特征存下来
page.css('.product', adaptive=True)       # 网站改版后,元素自动重新定位

官方基准测试里,这个能力比同类方案 AutoScraper 快约 5.5 倍。

常见问题

  • ModuleNotFoundError: No module named 'scrapling.fetchers' —— 只装了 pip install scrapling,没装 fetchers。改用 pip install "scrapling[all]"
  • pip 下载特别慢或者卡住 —— 加 -i https://mirrors.aliyun.com/pypi/simple/ 走国内镜像;换网络重试也行
  • scrapling install 下载浏览器失败 —— 不影响普通抓取。如上面第 6 步,直接指定本机已有的 Chrome 也行
  • 抓 Cloudflare 保护的站点超时 —— 改用 StealthyFetcher,并加上 solve_cloudflare=True
  • Windows 上提示 python 不是内部或外部命令 —— 安装 Python 时没勾 Add to PATH,重装并勾选,或手动把 Python 目录加进环境变量
  • 想给 AI 工具用 —— 装上 scrapling[ai] 后执行 scrapling mcp,可以接到 Claude / Cursor 这类支持 MCP 的客户端

不想敲命令行?

本站提供了一键安装工具包,下载后双击即可,脚本会自动帮你完成第 2 步到第 3 步的全部操作。

使用提醒

抓取前请先看目标网站的 robots.txt 和用户协议,控制请求频率。Scrapling 本身提供了 robots_txt_obey 选项和 AutoThrottle 自动限速,建议开启。