告别反复改选择器:Scrapling 爬虫指南
【免费下载链接】Scrapling🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling
上线爬虫的第二天,站点改版,所有精心写的选择器全部失效,只能重头排查 HTML。Scrapling 是一个 Python 网页抓取框架,抓取时把元素特征存下来,站点改版后自动重新定位,选择器只写一次。
它替你解决哪三类麻烦
站点结构频繁变化。写好的选择器在站点改版当天就会失效。Scrapling 的自适应解析在首次抓取时保存元素特征,改版后重新抓取页面时,框架用相似度算法把同一位置的节点找回来,不需要重查 HTML。
反爬封禁。Cloudflare Turnstile 会对带浏览器指纹的请求返回验证页。StealthyFetcher 运行一个修改过的 Chromium,TLS 与 JS 指纹都伪装成真实浏览器,传solve_cloudflare=True即可通过验证,拿到真实页面内容。
JS 渲染与大规模内存压力。单页应用的内容在初始 HTML 里是空的,DynamicFetcher 用真实浏览器执行完 JavaScript 后才返回最终 DOM;大规模爬取时,Spider 框架以流式输出条目,内存里只保留当前页面,不会把每一页都堆在 RAM 里。
🚀 五分钟上手
Scrapling 要求 Python 3.10 及以上,一次性装齐全部依赖;装完再执行一次安装命令,下载浏览器及其系统依赖(浏览器类获取器需要,仅需一次):
pip install "scrapling[all]" scrapling install # 下载浏览器及系统依赖六行代码就能跑通一次完整抓取,向示例站点发请求并提取全部引语:
from scrapling.fetchers import Fetcher page = Fetcher.get("https://quotes.toscrape.com/") # 发一次请求 quotes = page.css(".quote .text::text").getall() # 全部引语文本 authors = page.css(".quote .author::text").getall() # 全部作者 print(f"{len(quotes)} quotes")Fetcher.get()返回页面对象,.css()用 CSS 选择器取元素,::text伪元素用于取纯文本,.getall()把匹配结果收成列表。对刚接触 Python 爬虫的人,这一段就是"请求→解析→输出"的完整循环;只抓静态页时,pip install scrapling即可,无需装浏览器。
三大核心能力
自适应解析:站点改版后元素自我重新定位
开启 adaptive 后首次抓取,用auto_save=True保存元素特征。之后站点改版、原选择器匹配不到时,改传adaptive=True,框架会拿已存特征与新页面对比,重新定位到新节点。
Fetcher.adaptive = True # 开启自适应模式 page = Fetcher.get("https://example.com/") items = page.css(".product-card", auto_save=True) # 保存特征 # 站点改版后,靠 adaptive 自动重定位 items = page.css(".product-card", adaptive=True)绕过反爬的三级获取器
Fetcher 基于 curl_cffi 发普通 HTTP,可伪装成真实浏览器的 TLS 指纹,静态页与 API 最快;DynamicFetcher 用 Playwright Chromium 或系统 Chrome 跑页面,执行完 JavaScript 再返回 DOM,适配单页应用;StealthyFetcher 伪装更深的真实浏览器,solve_cloudflare=True可过 Cloudflare Turnstile 验证,适配高防护站点。更多取舍见获取器选择指南。
| Fetcher | DynamicFetcher | StealthyFetcher |
|---|---|---|
| 静态页、API | JS 渲染页 | 高防护站点 |
| curl_cffi 请求,可伪装浏览器 TLS 指纹 | Playwright Chromium/Chrome 执行页面 | 指纹伪装,过 Cloudflare 验证 |
爬虫框架:并发、多会话与检查点
concurrent_requests属性设置并发上限,框架按域名节流,避免把单个站点打爆。configure_sessions可在一个 Spider 里注册 HTTP 与隐身浏览器两类会话,请求按sid路由到指定会话。构造 Spider 时传入crawldir即启用检查点:Ctrl+C 保存进度,用同一路径再启动会从断点恢复。async for item in spider.stream()逐条流式产出结果,适合接管道或长时任务。
跟做一遍:一次完整抓取任务
如何把前面的能力拼成实际任务?以抓取引语列表页为例,Spider 框架用一个类串起请求、解析与批量输出:
from scrapling.spiders import Spider, Response class QuotesSpider(Spider): name = "quotes" start_urls = ["https://quotes.toscrape.com/"] concurrent_requests = 5 # 并发数 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() result.items.to_json("quotes.json") # 导出 JSONstart_urls决定入口页,异步parse回调解析每个响应:yield 字典即收集一条数据,yield follow 即沿"下一页"链接继续。start()返回后,全部结果在result.items里,除 JSON 外也支持 CSV、XML 等导出格式,细节见爬虫框架指南。
🧰 进阶要点清单
异步并发。AsyncFetcher.get()返回协程,可用asyncio.gather并行发请求;浏览器获取器有对应的异步会话(如AsyncStealthySession),内部自己管理页面池,不用手写连接管理。
代理轮换。把多个代理放进ProxyRotator,每次新请求按循环策略依次取用,也可传入自定义策略函数;所有会话类型都支持,单个请求还能用自己的代理覆盖。
from scrapling.engines.toolbelt.proxy_rotation import ProxyRotator rotator = ProxyRotator(["http://p1:8080", "http://p2:8080"]) # 循环取用断点续爬。构造 Spider 时传入crawldir,Ctrl+C 会保存进度;用同一目录再次启动即从断点恢复,长任务不必从头再来。
CLI 免代码测试选择器。extract子命令让终端直接抓页:scrapling extract get 'URL' out.md,配合--css-selector可只取指定范围,详见CLI 命令参考;scrapling shell交互外壳还能把现成的 curl 命令转成请求,方便调试。
MCP 与 AI 工具集成。pip install "scrapling[ai]"后,Claude、Cursor 等工具可通过 MCP 服务器调用 Scrapling 的抓取与解析能力,页面会先按选择器裁剪再进入上下文,详见MCP 服务器文档。
⚠️ 踩坑指南
问:浏览器驱动安装失败怎么办?答:执行scrapling install重新下载浏览器及系统依赖;Linux 上失败可加--force强制重装。
问:如何提升抓取速度?答:静态站直接用Fetcher,省去浏览器开销,再配AsyncFetcher并发;浏览器获取器可用disable_resources丢弃图片、字体等资源提速。
问:选择器突然失效怎么办?答:事先开启 adaptive 并用auto_save保存特征,改版后只需传adaptive=True,自适应选择器机制会自动重定位;也可用find_similar查找相似节点。
问:大页面内存占用高怎么办?答:不要囤积 Response 对象,取完即弃;改用 Spider 框架的stream()流式输出,内存不会随页面数量累积。
这套框架把元素重定位、浏览器伪装、大规模爬取收进同一个库,从单个请求到完整爬虫都能用同一套 API 写出来。网页抓取时请先查看目标站的 robots.txt,并把请求频率控制在合理范围,避免给目标服务器带来压力。
【免费下载链接】Scrapling🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考