Scrapling:反爬越来越凶,它把隐身浏览器做进了爬虫库
现在写爬虫比几年前难了一截。静态页越来越少,Cloudflare 这类盾在门口拦人,requests 拿到手的是一壳空 HTML。想渲染 JS 就得请出真浏览器,Playwright 一上,依赖和等待逻辑全都翻倍。Scrapling 干的事是把这条流水线收进一个 Python 库:HTTP 请求、隐身浏览器、HTML 解析、并发爬虫,四种能力一套 API。
它不算新面孔,仓库 2024 年 10 月就有首次提交,如今总星 97,994,今天热榜第 5。这次回归带着新鲜事:11 月 4 日刚发的 v0.5.1,瞄准的是 AI 智能体看页面的短板。这版让 agent 能看懂动起来的页面:录一小段视频拆成带时间戳的帧序列,动画、拖拽、控件位移这些单张截图看不出的变化就有据可查。
不过这版带了一个破坏性变更。连远程浏览器的老写法会直接断,得换新的浏览器会话类,官方配了迁移指南。升级前先翻一眼 changelog,别上来就无脑更新。
往前看一步,0.5 这一轮本身就是大改版。官方文档里从 0.4 升 0.5 有专门的迁移指南,v0.5.1 又动了远程连接的写法。老用户升级等于把接口重新过一遍,新上手的人反而没这个负担。
装它有一个必踩的坑,写在 README 里但容易被跳过。pip install scrapling 默认只装解析引擎,此时从 scrapling.fetchers 导入任何东西都会抛 ModuleNotFoundError。抓取能力要单独装 scrapling[fetchers],再跑 scrapling install 下载浏览器内核。Python 版本要求 3.10 以上。
最小例子长这样,直接摘自 README:
from scrapling.fetchers import Fetcher
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()
print(quotes)
选择器写法沿用了 Scrapy 那套 css 语法,写过 Scrapy 的人零成本上手。要并发抓整站,它也给了 Spider 类,写法照着 Scrapy 来。Scrapy 用户熟悉的骨架都搬了过来:CrawlSpider、SitemapSpider、XMLFeedSpider,还多了个 ShopifySpider。抓一半断了不怕,支持暂停续爬,AutoThrottle 会按网站响应自动放慢节奏,导出有 JSON、JSONL、CSV、XML 四种格式。
抓取本身分了两档,按需取用。轻的那档叫 Fetcher,走高速 HTTP 请求,支持 HTTP/3,能模拟浏览器的 TLS 指纹;重的那档叫 StealthyFetcher,底下是一个真 Chromium,靠 Playwright 驱动。普通的活走轻档,速度不牺牲;碰上难缠的站点再上重档。这是它和全量上浏览器那类工具的路线差别。
真正的分野在反爬这层。StealthySession 开 solve_cloudflare 能过 Cloudflare Turnstile 验证,代理轮换、会话保持、robots.txt 开关都是现成参数。隐身模式下还内置了两道防护:抓取时拦掉约 3500 个广告和追踪域名,DNS 走 DoH 防泄漏。过盾的写法 README 里给了现成例子:
with StealthySession(headless=True,
solve_cloudflare=True) as session:
url = 'https://nopecha.com/demo/cloudflare'
page = session.fetch(url, google_search=False)
还有一类页面,数据不走 HTML,走的是页面背后的接口。它有个 record_requests 参数,抓页面的同时把后台 API 调用记下来,之后用 session.network.search() 直接搜响应。比从渲染好的 DOM 里抠数干净得多,这也是很多同类库没覆盖的角落。
不开 Python 也能用。装上 shell 扩展后,scrapling extract 一条命令抓页面存成 Markdown,或按 CSS 选择器抠字段,加 --impersonate chrome 能伪装浏览器指纹,加 --solve-cloudflare 直接过盾。scrapling shell 则是个 IPython 交互环境,还支持把 curl 命令转过来改,抓取逻辑可以当场试。
给 AI 留的入口比想象中多。内置 MCP server,Claude、Cursor 这类工具配好就能使唤它抓网页:发请求、开浏览器、截图、带上已保存的登录态都行。抓回来的内容先精简再喂给模型,省上下文,还带了防 Prompt 注入的处理。page.markdown() 一行就能把页面转成 LLM 友好的 Markdown。MCP 走带认证的 HTTP transport 也能远程接,CDP 那头可以直接连你已经开着的浏览器。
和同行摆在一起看,差别就清楚了。Scrapy,老牌框架,生态厚,但浏览器渲染和反爬要自己外挂。crawl4ai,路子更窄,专攻把网页转成喂给大模型的 Markdown,Scrapling 的 markdown 输出同样能干这件事。Scrapling 的打法是两头都要:既能当常规框架用,也内置 MCP server 和 Agent Skill,智能体可以直接调它。另有一个 crawlee,是 TypeScript 生态的同类,Python 选手可以略过。
解析这块是它自己攒的底子。README 的基准写着,5000 个嵌套元素解析只要 1.99 毫秒,BeautifulSoup 加 html5lib 慢一千七百多倍;这组数是作者自己跑的,听个量级就好。更实用的是自适应元素追踪:网站改版后元素挪了位置,它会按特征重新定位,不用手改选择器。README 另外自称测试覆盖率 92%、代码全量带类型注解,工程化的程度在爬虫库里算讲究的。
文档的底子也厚。README 有包括简体中文在内的十个语言版本,文档站 scrapling.readthedocs.io 同步维护。不想本地装环境的话,官方 Docker 镜像拉下来就能跑。
坑和限制也如实摆出来。Issues 里最近三条都是这几天新开的:base href 处理相对链接被忽略、Response.follow 跨域跳转会带上凭据、韩国电商 Coupang 抓不动。Coupang 那条很说明问题——隐身能力不是万能钥匙,硬骨头照样啃不动。README 还把免责写在明处:仅供学习研究,遵守网站条款和 robots.txt。
什么样的人值得装。天天跟反爬较劲、或者要给智能体接抓取能力的人,它一个顶四个。做 AI 语料收集的同样踩在能力圈里,ContentSpider 一个类就能整站收 Markdown。只想抓几个静态页面的话,requests 加 BeautifulSoup 足够,犯不上为隐身浏览器付安装成本。要在生产里做大规模调度,Scrapy 积累的中间件和社区答案更充裕,稳妥些。
项目地址:https://github.com/D4Vinci/Scrapling
竞品地址:
https://github.com/scrapy/scrapy
https://github.com/unclecode/crawl4ai
https://github.com/apify/crawlee
更多推荐

所有评论(0)