大家好,我是小小。
写在前面
写过爬虫的都知道,最痛苦的不是写代码,而是维护。
你花两天写好的爬虫,跑得好好的,结果目标网站改了个版,CSS选择器全废了,又得重新来一遍。这种事我经历过太多次了。
昨天刷GitHub看到一个项目,star数已经5万多了,叫 Scrapling。
它主打一个功能:网页改版了,你的爬虫不用改。
我当时就想,这要是真的,那可太香了。
先说结论:它是真的
Scrapling 的核心能力就一句话:它的解析器会"记住"你选的元素长什么样,下次网页结构变了,它会自动找到新位置。
原理其实也不复杂。它会记录元素的文本内容、属性、层级关系这些特征,然后通过相似度算法去重新定位。不是简单地靠 CSS 选择器硬匹配。
from scrapling.fetchers import StealthyFetcher p = StealthyFetcher.fetch('https://example.com', headless=True) products = p.css('.product', auto_save=True) # 第一次保存特征 # 网站改版后,加上 adaptive=True 自动重定位 products = p.css('.product', adaptive=True)
说实话这个功能我之前自己也想做过,但一直没有动手。看到有人做出来了,还是开源免费的,有点佩服。
不止是"自愈",反爬也给你解决了
现在的网站反爬越来越离谱了,Cloudflare Turnstile、各种指纹检测、行为分析...
之前我用 requests + BeautifulSoup 的组合,遇到 Cloudflare 保护的网站基本就投降了。要么换 Selenium,要么用 DrissionPage,要么花大价钱买代理服务。
Scrapling 自带几种 Fetcher:
Fetcher:普通 HTTP 请求,但可以模拟 Chrome 的 TLS 指纹和 HTTP/3StealthyFetcher:隐身模式,开箱即用绕过 Cloudflare TurnstileDynamicFetcher:完整浏览器自动化,支持 Playwright 的 Chromium 和 Google Chrome
from scrapling.fetchers import StealthyFetcher, StealthySession # 一行代码搞定 Cloudflare with StealthySession(headless=True, solve_cloudflare=True) as session: page = session.fetch('https://nopecha.com/demo/cloudflare') data = page.css('#padded_content a').getall()
我测试了一下,几个有 Cloudflare Turnstile 的测试网站确实都能直接过,不用额外配置。
大规模爬取也有完整方案
如果只是抓几个页面,requests + BeautifulSoup 确实够了。但要做大规模爬取,Scrapy 那套并发、代理轮换、断点续爬的机制就得搬出来了。
Scrapling 内置了类 Scrapy 的 Spider 框架,而且更灵活:
from scrapling.spiders import Spider, Response class MySpider(Spider): name = "demo" start_urls = ["https://example.com/"] concurrent_requests = 10 async def parse(self, response: Response): for item in response.css('.product'): yield {"title": item.css('h2::text').get()} next_page = response.css('.next a') if next_page: yield response.follow(next_page[0].attrib['href']) result = MySpider().start()
几个我觉得挺实用的功能:
- 断点续爬
- 多 Session 混用:同一个爬虫里,普通页面用快速 HTTP,有反爬的页面自动切到隐身浏览器
- 实时 Streaming:
async for item in spider.stream() 边爬边处理,不用等全部跑完 - 自动代理轮换:内置 ProxyRotator,支持轮询和自定义策略
- 开发模式:首次请求缓存到磁盘,后续直接读缓存,调试不浪费请求
速度也没掉队
很多人担心这种功能多的库会不会很慢,Scrapling 专门做了基准测试:
解析速度跟 Scrapy 基本持平,比 PyQuery 快了 12 倍。而且它的 JSON 序列化比标准库快 10 倍。
适合什么人用
我觉得这几类人可以关注:
- 经常写爬虫但受够了维护的
- 反爬绕不过去的——Cloudflare Turnstile 开箱即用
- 从 requests + BS4 想升级的——API 跟 Scrapy/Parsel 类似,迁移成本低
- 用 AI 做数据采集的——自带 MCP Server,可以跟 Claude、Cursor 等 AI 工具配合使用
怎么安装
pip install scrapling
Python 3.10 以上就行,不想装依赖的话有 Docker 镜像:
docker pull ghcr.io/d4vinci/scrapling:latest
项目有完整的中文文档,从安装到高级用法都覆盖了,可以翻翻看。
结语
Scrapling 的作者 D4Vinci 是个比较低调的开发者,但这个项目的完成度确实高。92% 的测试覆盖率,完整的类型提示,支持 9 种语言的 README,还有 Discord 社区和专门的 X 账号。
从 2025 年初发布到现在一年多,star 数从零到 5 万多,说明它确实解决了真实痛点。
我自己目前还在用 DrissionPage 做主力爬虫框架,但 Scrapling 的自适应定位这个功能确实让我心动。等我找时间迁移几个项目试试效果,到时候再跟大家分享实战感受。
如果你有爬虫维护的痛苦经历,这个项目值得一看。
项目地址:https://github.com/D4Vinci/Scrapling
(觉得有用请点赞、收藏、转发三连!有问题评论区见~)