Scrapling:能够自动修复的网页爬虫

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00这是 Scrapling,一个旨在解决网络爬虫最头疼问题的 Python 爬虫库。
00:00:05爬虫今天能用,网站一变就挂。改一个类名,
00:00:10移一个 div,加一个机器人检测,你的数据管道就瘫痪了。Scrapling 的核心理念是
00:00:17让你的爬虫能够自适应而不是直接崩溃。它在 GitHub 上拥有超过 53,000 个星标,
00:00:22支持自适应解析、隐身抓取以及更大规模的爬虫工作流。
00:00:27我打算测试一个最关键的问题。
00:00:30它能在不重写选择器的情况下应对网站变更吗?我们马上来揭晓。
00:00:40那么,什么是 Scrapling?Scrapling 是一个自适应的一站式 Python 网络爬虫框架。
00:00:46你拥有自愈解析器、隐身抓取器,在需要 JavaScript 时还有基于浏览器的抓取方式,
00:00:51以及用于大规模抓取的蜘蛛框架。一次安装,一个 API。这意味着更少的爬虫损坏,
00:00:57并能获得更多可用的数据。现在,让我们看看真正关键的部分。
00:01:03如果你喜欢通过代码工具来加速工作流程,请务必订阅。我们会不断推出新视频。
00:01:08现在,我这里有一个基础设置,对吧?我已经安装了 Scrapling,所以我们快速过一下。
00:01:13一次导入,一次调用,我们就拿到了页面。在上面,我创建了一些会改变的 HTML。
00:01:21一个是普通的起始页面。然后我保持内容不变,但切换了 CSS 选择器。
00:01:27假设我想获取产品名称和价格。通常,我可能会用 CSS 选择器来抓取它们,
00:01:34对吧?所以使用 page CSS,填入选择器,设置 auto-save 为 true。我可以这样做,
00:01:40它就能工作,我们会得到一个数据字典。看起来很正常。两个选择器,一个字典,
00:01:46我继续进行下一步。就是这样。但同时,这实际上是个问题,因为普通的爬虫在
00:01:52页面变更前运行良好。现在,如果网站在一夜之间随机发生变化呢?他们重新设计了它。
00:01:58他们做了一些调整来防止这种情况。比如产品标题变成了 item heading,或者产品价格变成了
00:02:04pricing value。页面上有同样的数据,但整个 DOM 结构改变了。旧的选择器应该
00:02:11已经失效了。这就是大多数爬虫崩溃的地方。但现在我们可以开启自适应模式。
00:02:18只需将 autosave 等于 true 改为 adaptive 等于 true。现在我仍然可以把产品标题
00:02:26设置 adaptive 为 true。数据是一样的。我没有更改选择器。页面结构变了,却
00:02:34不需要重写选择器。这就是这里的主要思想。当你以 autosave 为 true 抓取元素时,
00:02:40Scrapling 会记录关于它的线索。所以它会记录标签、属性、
00:02:44父子节点、邻近文本,可能还有 DOM 位置和结构形状。所以当
00:02:50类名改变时,Scrapling 还有很多剩下的线索。它不需要整个网站保持不变。
00:02:56它只需要足够的结构信号来再次识别该元素。这就是
00:03:01最重要的地方,因为真正的爬虫故障几乎从来不是完全重设计。通常是一个重命名的类,
00:03:06一个新的包装器,一个移动的布局,一件小事。这正是自适应匹配所针对的。
00:03:13Scrapling 有三个重要的核心组件。第一是刚才看到的自适应解析器。
00:03:18然后是多功能抓取器,单一工作流,适合各种任务。抓取器支持普通 HTTP,
00:03:25快速处理简单页面。隐身抓取器可以在需要时绕过反爬虫机制。动态抓取器是针对
00:03:32重 JavaScript 站点的真实浏览器。一个 API,切换抓取器,保持代码不变。当快速
00:03:39脚本变成真正的爬虫时,蜘蛛框架就派上用场了。异步爬取、暂停和恢复、代理轮转、流式传输,以及所有这些
00:03:46混合会话。那些你通常后期添加的功能,它都已经具备了。Scrapling 不仅仅是另一个
00:03:53解析器。它用单一工作流取代了整个抓取技术栈:Requests、BeautifulSoup、Playwright、重试逻辑、代理助手、
00:04:00蜘蛛代码。Scrapling 并不是说 BeautifulSoup 没用,也不是说
00:04:06Playwright 或 Scrapy 已经过时了。BeautifulSoup 加 Requests 对于简单页面仍然非常棒。它简单,
00:04:13易读,每个人都懂,但它不提供任何隐身能力。它不提供
00:04:20自适应选择器,也不能渲染 JavaScript。对于大型解析任务,它可能
00:04:26成为真正的瓶颈。而 Scrapy 很强大。如果你正在构建严肃的爬取
00:04:31基础设施,Scrapy 仍然值得尊重,但 Scrapy 往往意味着设置、管道、中间件、
00:04:36扩展程序以及大量的设置工作。Playwright 和 Selenium 在你需要真实浏览器时很棒。
00:04:42有时页面确实需要 JavaScript。没别的办法。但浏览器很沉重。它们
00:04:48比纯 HTTP 慢,而且占用更多内存。再说一次,它们仍然无法解决选择器损坏的
00:04:54问题。它们运行页面,但不理解你的爬虫意图。所以有了 Scrapling,
00:05:01你可以在可能的情况下使用快速抓取,需要时使用隐身抓取,在页面
00:05:06需要时使用浏览器渲染,并使用自适应解析。这样前端的一点小改动就不会搞垮一切。不过,这一切
00:05:12并不意味着 Scrapling 没有问题。如果你面对的是 DOM 级别的数据保护、
00:05:17高级指纹识别或激进的速率限制,你可能仍然需要高质量的代理。所以 Scrapling 可以
00:05:23提供帮助,但它不会让你隐身。动态抓取也可能意味着额外的浏览器设置。这就是
00:05:29涉及 JavaScript 渲染时的权衡。以下是关于这一切的一些思考。
00:05:34如果你做真实的爬虫工作,尤其是构建数据管道、
00:05:41有 RAG 任务、AI 代理或任何需要在目标网站变更后持续运行的任务,Scrapling 都值得尝试。使用它的
00:05:47最强理由不是因为它让抓取成为可能。我们已经有了能够做到这一点的工具,对吧?
00:05:53最强理由是它降低了维护成本。当然,如果是非常微小的脚本,
00:05:59我可能会跳过它,Requests 和 BeautifulSoup 就足够了,对吧?
00:06:04如果你喜欢这类编程工具,请务必订阅 BetterStack 频道。我们下个视频见。

Key Takeaway

Scrapling通过内置的自适应解析机制,在目标网站DOM结构发生变化时无需手动重写选择器,从而大幅降低了数据管道的维护成本。

Highlights

  • Scrapling是一个支持自适应解析的Python网络爬虫库,旨在解决网页结构变更导致爬虫失效的问题。

  • 将爬虫的选择器参数由autosave设为adaptive后,即便网页DOM结构发生类名或布局变更,爬虫仍能通过记录的父子节点、邻近文本和结构特征识别目标元素。

  • 该工具整合了自适应解析器、多功能抓取器(HTTP、隐身、浏览器渲染)和蜘蛛框架,使用统一的API即可完成复杂抓取任务。

  • Scrapling在GitHub上拥有超过53,000个星标,适用于RAG任务、AI代理及需要持续运行的数据管道。

  • 与传统的Requests、BeautifulSoup或Playwright相比,Scrapling通过自适应匹配显著降低了爬虫在前端改动后的维护成本。

Timeline

爬虫失效的核心痛点与解决方案

  • 网站微小的类名变更或结构调整常导致爬虫数据管道瘫痪。
  • Scrapling的核心理念是使爬虫具备自适应能力,而非在遇到变化时直接崩溃。

传统爬虫极度依赖静态选择器,一旦网站进行重新设计或调整布局,代码即失效。Scrapling通过一次性安装和统一API,提供了包含自愈解析、隐身抓取以及浏览器渲染的一站式方案,旨在减少爬虫故障并提高数据获取效率。

自适应解析与工作原理

  • 通过将adaptive参数设为true,爬虫不再仅依赖CSS选择器,而是结合标签、属性、邻近文本及DOM形状进行匹配。
  • 即便产品标题或价格的类名被重命名,Scrapling仍能通过剩余的结构信号识别出目标元素。

测试展示了在页面结构发生显著调整(如类名变更)的情况下,普通爬虫会失效,而Scrapling通过在autosave记录阶段保存的丰富环境线索,能够自动识别结构化数据。这解决了爬虫维护中最常见的因小规模页面改动引发的故障。

核心架构与技术堆栈对比

  • Scrapling整合了HTTP抓取、隐身抓取和动态浏览器渲染,无需切换不同的技术栈。
  • BeautifulSoup在简单页面上有效,但缺乏自适应解析;Playwright功能强大但资源消耗较大且不具备结构自愈能力。

该框架将Requests、BeautifulSoup、Playwright及代理轮转等功能集成到单一工作流中。它允许用户在快速脚本和复杂抓取任务之间灵活切换,同时通过自适应技术,填补了现有工具在处理网站动态变更方面的空白。

适用场景与局限性分析

  • Scrapling不能规避DOM级别的深度指纹识别或极端的速率限制,高级场景下仍需配合高质量代理。
  • 对于构建AI代理、RAG任务或长期运行的数据管道,该工具能通过减少维护工作提供显著价值。

尽管Scrapling在结构适应性上表现出色,但它并非解决所有反爬机制的万能药。在面对高性能要求或复杂指纹识别时,仍需进行额外的基础设施配置。对于简单的微小脚本,传统的轻量级工具依然是合理的选择。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video