Scrapling 是一款自适应网络爬虫框架,自动处理从单次请求到大规模爬取的所有场景。内置反反爬系统可绕过 Cloudflare 等防护,支持代理轮换、断点续传、并发爬取,仅需几行 Python 代码即可实现高效数据采集。

🎤 引言:爬虫开发的痛点

你有没有遇到过这种情况:

  • 写好的爬虫脚本,网站改版后就失效了,元素定位全错
  • 遇到 Cloudflare 防护就束手无策,请求直接被拦截
  • 大规模爬取时 IP 被封,没有自动代理轮换机制
  • 长时爬虫中断后无法恢复,只能从头再来
  • 需要在多个会话类型之间切换,代码复杂难维护

如果你正在寻找一个能解决所有这些问题的爬虫框架,那么今天给大家安利这款开源神器——Scrapling。它是一款自适应网络爬虫框架,从单次请求到大规模爬取都能轻松应对,内置反反爬系统、代理轮换、断点续传等强大功能。


📱 Scrapling 是什么?

Scrapling 是一款自适应网络爬虫框架,自动处理从单次请求到大规模爬取的所有场景。

项目地址https://github.com/D4Vinci/Scrapling

GitHub 数据

  • ⭐ Stars: 高人气爬虫项目
  • 📜 许可证:BSD-3-Clause
  • 📊 测试覆盖率:92%
  • 🐍 Python 版本:3.10+
  • 📅 持续维护:活跃开发中

核心特性

  1. 自适应解析 - 元素定位自动适应网站变化
  2. 反反爬 bypass - 绕过 Cloudflare 等防护系统
  3. 代理轮换 - 内置代理轮换器防止 IP 被封
  4. 断点续传 - 基于检查点的爬取持久化
  5. 并发爬取 - 可配置的并发限制和域节流
  6. 多会话支持 - HTTP、隐身、动态浏览器统一接口

一句话总结:如果你需要一个功能全面、自适应、反反爬的爬虫框架,Scrapling 是目前 Python 生态中的最佳选择。


🔥 核心功能亮点

1️⃣ 自适应元素追踪

网站改版后自动重定位元素

from scrapling.fetchers import Fetcher

page = Fetcher.get('https://example.com/')
# 首次爬取,auto_save=True 保存元素特征
products = page.css('.product', auto_save=True)

# 网站改版后,adaptive=True 自动重定位
products = page.css('.product', adaptive=True)

智能相似度算法

  • 学习网站结构变化
  • 自动重定位目标元素
  • 减少维护成本

2️⃣ 反反爬系统

绕过 Cloudflare 等防护

from scrapling.fetchers import StealthyFetcher

# 自动绕过 Cloudflare Turnstile
page = StealthyFetcher.fetch(
    'https://nopecha.com/demo/cloudflare',
    solve_cloudflare=True
)
data = page.css('#padded_content a').getall()

隐身能力

  • TLS 指纹模拟最新 Chrome
  • 请求头自动伪装
  • 支持 HTTP/3
  • 指纹欺骗防止检测

3️⃣ 多会话支持

统一接口管理多种会话类型

from scrapling.spiders import Spider, Request, Response
from scrapling.fetchers import FetcherSession, AsyncStealthySession

class MultiSessionSpider(Spider):
    name = "multi"
    start_urls = ["https://example.com/"]
    
    def configure_sessions(self, manager):
        # 快速会话用于普通请求
        manager.add("fast", FetcherSession(impersonate="chrome"))
        # 隐身会话用于受保护页面
        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")
            else:
                # 普通页面走快速会话
                yield Request(link, sid="fast")

支持的会话类型

  • FetcherSession - HTTP 请求
  • StealthySession - 隐身浏览器
  • DynamicSession - 动态浏览器自动化

4️⃣ 断点续传

长时爬虫中断后自动恢复

from scrapling.spiders import Spider, Response

class QuotesSpider(Spider):
    name = "quotes"
    start_urls = ["https://quotes.toscrape.com/"]
    
    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(),
            }
        
        next_page = response.css('.next a')
        if next_page:
            yield response.follow(next_page[0].attrib['href'])

# 启动爬虫,指定保存目录
QuotesSpider(crawldir="./crawl_data").start()

工作原理

  • 基于检查点的爬取持久化
  • 按 Ctrl+C 优雅暂停
  • 重启时自动从断点恢复
  • 无需重新爬取已抓取内容

5️⃣ 并发爬取

高性能并发采集

class QuotesSpider(Spider):
    name = "quotes"
    start_urls = ["https://quotes.toscrape.com/"]
    concurrent_requests = 10  # 并发请求数

并发控制

  • 可配置并发限制
  • 每域节流防止封禁
  • 下载延迟控制
  • 实时统计信息

6️⃣ 代理轮换

内置代理轮换器

from scrapling.fetchers import Fetcher, ProxyRotator

# 创建代理轮换器
rotator = ProxyRotator(
    proxies=['proxy1:port', 'proxy2:port'],
    strategy='cyclic'  # 轮换策略:cyclic 或 custom
)

# 在会话中使用
with FetcherSession(proxy_rotator=rotator) as session:
    page = session.get('https://example.com/')

轮换策略

  • 循环轮换(cyclic)
  • 自定义轮换(custom)
  • 每请求代理覆盖

7️⃣ 完整浏览器自动化

支持 Playwright Chromium 和 Chrome

from scrapling.fetchers import DynamicFetcher, DynamicSession

# 完整浏览器自动化
with DynamicSession(headless=True, network_idle=True) as session:
    page = session.fetch('https://quotes.toscrape.com/')
    data = page.xpath('//span[@class="text"]/text()').getall()

浏览器功能

  • 无头模式
  • 资源加载控制
  • 网络空闲检测
  • 完整 DOM 操作

8️⃣ 流式输出

实时获取爬取结果

async for item in spider.stream():
    print(f"实时获取:{item}")
    # 适合 UI 展示、管道处理、长时爬取

适用场景

  • UI 实时展示
  • 数据管道处理
  • 长时爬取监控

📊 性能对比

解析器性能基准测试

排名时间 (ms)相对 Scrapling
1Scrapling2.021.0x
2Parsel/Scrapy2.041.01x
3Raw Lxml2.541.26x
4PyQuery24.17~12x
5Selectolax82.63~41x
6MechanicalSoup1549.71~767x
7BS4 with Lxml1584.31~784x
8BS4 with html5lib3391.91~1679x

自适应元素查找性能

时间 (ms)相对 Scrapling
Scrapling2.391.0x
AutoScraper12.455.21x

结论:Scrapling 解析器性能与 Scrapy/Parsel 相当,远超 BeautifulSoup 等库。


🛠️ 快速上手指南

第一步:安装

基础安装(仅解析器)

pip install scrapling

完整安装(包含所有功能)

pip install "scrapling[all]"
scrapling install  # 安装浏览器依赖

Docker 安装

docker pull pyd4vinci/scrapling
# 或
docker pull ghcr.io/d4vinci/scrapling:latest

第二步:简单爬取

HTTP 请求

from scrapling.fetchers import Fetcher

page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()

隐身模式绕过 Cloudflare

from scrapling.fetchers import StealthyFetcher

page = StealthyFetcher.fetch(
    'https://nopecha.com/demo/cloudflare',
    solve_cloudflare=True
)
data = page.css('#padded_content a').getall()

完整浏览器自动化

from scrapling.fetchers import DynamicFetcher

page = DynamicFetcher.fetch('https://quotes.toscrape.com/')
data = page.css('.quote .text::text').getall()

第三步:创建爬虫

基础爬虫

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(),
            }
        
        next_page = response.css('.next a')
        if next_page:
            yield response.follow(next_page[0].attrib['href'])

result = QuotesSpider().start()
print(f"爬取了 {len(result.items)} 条名言")
result.items.to_json("quotes.json")

第四步:高级功能

会话管理

from scrapling.fetchers import FetcherSession

with FetcherSession(impersonate='chrome') as session:
    page = session.get('https://example.com/')
    quotes = page.css('.quote .text::text').getall()

异步支持

import asyncio
from scrapling.fetchers import FetcherSession

async with FetcherSession(http3=True) as session:
    page1 = session.get('https://example.com/page1')
    page2 = session.get('https://example.com/page2', impersonate='firefox135')

导出结果

# JSON 导出
result.items.to_json("output.json")

# JSONL 导出
result.items.to_jsonl("output.jsonl")

💡 使用技巧与注意事项

技巧 1:自适应爬取

首次爬取保存元素特征

products = page.css('.product', auto_save=True)

网站改版后自动重定位

products = page.css('.product', adaptive=True)

技巧 2:隐身模式配置

保持浏览器会话

from scrapling.fetchers import StealthySession

with StealthySession(headless=True, solve_cloudflare=True) as session:
    page = session.fetch('https://example.com/')
    # 浏览器保持打开,可继续请求

技巧 3:断点续传

启动时指定保存目录

QuotesSpider(crawldir="./crawl_data").start()

中断后恢复

# 按 Ctrl+C 暂停
# 再次运行相同命令自动恢复
QuotesSpider(crawldir="./crawl_data").start()

技巧 4:CLI 工具

交互式爬虫 Shell

scrapling shell

无需编程直接爬取

# 提取页面内容到 Markdown
scrapling extract get 'https://example.com' content.md

# 使用 CSS 选择器提取
scrapling extract get 'https://example.com' content.txt \
  --css-selector '#products' --impersonate 'chrome'

# 绕过 Cloudflare
scrapling extract stealthy-fetch 'https://nopecha.com/demo/cloudflare' \
  content.html --css-selector '#padded_content a' --solve-cloudflare

注意事项

  • ⚠️ 合法合规:遵守目标网站的 robots.txt 和服务条款
  • ⚠️ 请求频率:合理设置并发和延迟,避免对目标网站造成压力
  • ⚠️ 代理质量:使用可靠的代理服务,避免免费代理
  • ⚠️ 资源消耗:浏览器自动化消耗较多内存,合理配置并发

🎯 适用人群

强烈推荐

  • 🕷️ 爬虫开发者 - 需要强大的自适应爬取能力
  • 📊 数据采集工程师 - 需要绕过反爬系统
  • 🏢 企业用户 - 需要大规模并发爬取
  • 🔧 Python 开发者 - 需要简单易用的爬虫库

可以考虑

  • 📈 市场研究人员 - 采集公开数据
  • 🎓 学术研究者 - 数据采集分析
  • 🛒 电商从业者 - 价格监控

不太适合

  • 🚫 违法数据采集 - 请遵守法律法规
  • 🚫 恶意攻击 - 请勿用于非法用途

📥 下载渠道

官方渠道(推荐):

文档与帮助

安装命令汇总

# 仅解析器
pip install scrapling

# 完整功能
pip install "scrapling[all]"
scrapling install

# MCP 服务器(AI 辅助)
pip install "scrapling[ai]"

# 交互式 Shell
pip install "scrapling[shell]"

📝 总结

Scrapling 是一款让我眼前一亮的爬虫框架。它在自适应能力反反爬 bypass大规模爬取三个方面都做到了极致,真正实现了"一个库,零妥协"。

优点

  • ✅ 自适应元素追踪,网站改版自动重定位
  • ✅ 内置反反爬系统,绕过 Cloudflare 等防护
  • ✅ 代理轮换防止 IP 被封
  • ✅ 断点续传,长时爬虫中断后恢复
  • ✅ 多会话支持,HTTP/隐身/动态浏览器统一接口
  • ✅ 高性能解析器,与 Scrapy/Parsel 相当
  • ✅ 完整类型覆盖,IDE 支持优秀
  • ✅ CLI 工具丰富,交互式 Shell 加速开发

不足

  • ⚠️ 浏览器自动化消耗较多内存
  • ⚠️ 学习曲线略陡峭(功能太多)
  • ⚠️ 需要 Python 3.10+

推荐指数:⭐⭐⭐⭐⭐(5/5)

如果你正在寻找一款功能全面、自适应、反反爬的爬虫框架,Scrapling 绝对值得一试。它可能是目前 Python 生态中最强大的爬虫库。

下载链接https://pypi.org/project/scrapling/

GitHub 项目https://github.com/D4Vinci/Scrapling


免责声明:本库仅供教育和研究用途。使用本库时,请遵守当地和国际数据爬取及隐私法律。