Scrapling 网页抓取:2026 年教程

如果您曾遇到过工作中的刮泥机一夜之间倒塌的情况,您就会明白其中的苦恼。 刮削 来的。这个 Python 库专为当今混乱、不可预测的网络而设计。它能根据网站结构的变化进行学习和调整,并包含隐身工具,能不费吹灰之力就穿过常见的僵尸防御系统。
在本教程中,我将逐步向你展示如何安装和使用 Scrapling、提取结构化数据以及轻松处理动态页面。到最后,你将拥有一个即使在网络出现问题时也能保持可靠的 Scrapling。

什么是 Scrapling?

本文介绍如何使用 Scrapling 进行网页抓取,并演示 2026 年常见场景下的使用方法与示例。

Scrapling 徽标

Scrapling 是一个开源 Python 库,设计用于高效的网络搜索,具有独特的自适应能力。与旧版库(如 BeautifulSoup,Scrapling 可以借助内置的相似度算法自动适应轻微的 HTML 变化。它配备了自己的快速解析引擎,性能优于大多数 Python 抓取库。

Scrapling 支持使用 用于 JavaScript 渲染的 Playwright 通过多个取件器类别,每个类别都针对不同情况进行了优化。它包括先进的隐身模式功能,使用修改过的火狐浏览器绕过复杂的反僵尸保护。

Scrapling 的主要功能

  • 自适应选择器:利用智能相似性算法,在 HTML 结构发生变化时自动重新定位元素
  • 多种捕捉器类别:选择 捕捉器 (HTTP)、 动态捕获器 (剧作家铬),以及 隐形捕手 (改装后的火狐浏览器,具有高级隐身功能)
  • 选择器连锁:无需循环即可连锁 CSS 和 XPath 选择器
  • 会话管理:会话管理 FetcherSession动态会话和 隐身会话 班级
  • 异步支持:通过专用的异步会话类,为所有取件器提供完整的异步支持
  • 正则集成:内置正则支持,配合 re() 和 re_first() 方法
  • CLI 工具:带有交互式 shell 的命令行界面,用于快速开发
  • 高性能:优化性能,基准测试显示某些操作的速度比 BeautifulSoup 快达 698 倍

如何使用 Scrapling 进行网络抓取?

准备好掌握现代网络刮擦技术了吗?了解如何使用 Scrapling 轻松提取数据、适应网站变化并不被发现。

先决条件

安装

从 v0.3.2,Scrapling 采用模块化安装方式:

基本安装(只有解析器,没有获取器):

pip install scrapling

安装取件器和浏览器依赖项:

pip install "刮板[取物器]"
刮板安装

"(《世界人权宣言》) 刮板安装 命令下载所有浏览器及其系统依赖项和指纹处理工具。

安装一切(取件器、人工智能功能、CLI 工具):

pip install "潦草[全部]"
刮板安装

步骤 1:从网页获取 HTML

首先测试 Scrapling 能否访问目标网站。使用 捕捉器 类的 HTTP 请求:

from scrapling.fetchers import 获取器
page = Fetcher.get("https://www.scrapingcourse.com/ecommerce/")
print(页面.状态)  # 应打印:200
print(page.html_content)

如果成功,您将看到 HTTP 状态代码 200 和网页的完整 HTML。

第 2 步:使用 CSS 选择器抓取产品数据

Scrapling 可以使用自适应选择器自动调整以适应微小的布局变化,但默认情况下该功能是禁用的。

首先,使用 DevTools 检查产品元素。对于本网站

  • 产品名称以 h2.woocommerce-loop-product__title
  • 价格 .价格
  • 图片 .woocommerce-LoopProduct-link img
from scrapling.fetchers import 获取器
page = Fetcher.get("https://www.scrapingcourse.com/ecommerce/")
# 提取产品数据
names = page.css("h2.woocommerce-loop-product__title")
prices = page.css(".价格")
images = page.css(".woocommerce-LoopProduct-link img")
产品数据 = []
for 名称、价格、图像 in zip(名称、价格、图像):
    # 使用 regex 只提取价格编号
    price_value = price.re_first(r'[d.,] ')
    
    数据 = {
        "name": name.text、
        "price": f "${价格值}",
        "图像": image.attrib["src"],
    }
    product_data.append(data)
print(product_data)

启用自适应选择器 (即使在网站更新后也能跟踪元素):

# 在全局范围内启用自适应功能
Fetcher.adaptive = True
page = Fetcher.get("https://www.scrapingcourse.com/ecommerce/")
# 保存元素属性以备将来调整
names = page.css(".product-name", auto_save=True)
# 以后,当网站结构发生变化时,使用自适应模式
names = page.css(".product-name", adaptive=True) # 即使 CSS 发生变化,Scrapling 也能找到它们!

步骤 3:启用隐身模式

许多网站使用 Cloudflare 等反爬工具来阻止爬虫。Scrapling 的 隐形捕手 它使用的是经过修改的火狐浏览器,具有高级指纹欺骗功能。

使用 隐身会话 或 隐形捕手 与 无头=真 旗子

from scrapling.fetchers import 隐形捕手
# 一次性请求(打开和关闭浏览器)
page = StealthyFetcher.fetch(
    "https://www.scrapingcourse.com/cloudflare-challenge/",
    无头=True
)
print(页面.状态)

对于多次请求,使用会话保持浏览器打开:

from scrapling.fetchers import 隐身会话
# 保持浏览器打开以处理多个请求
with StealthySession(headless=True) as 会话
    page = session.fetch("https://www.scrapingcourse.com/cloudflare-challenge/")
    print(page.html_content)

请注意: "(《世界人权宣言》) solve_cloudflare 参数可用,但应根据特定的 Cloudflare 保护类型谨慎使用。

真实世界示例:抓取电子商务数据

这是一个完整的带错误处理功能的刮擦器:

from scrapling.fetchers import 获取器
page = Fetcher.get("https://www.scrapingcourse.com/ecommerce/")
if page.status != 200:
    print(f "获取页面失败: {page.status}(网页状态")
    exit()
names = page.css("h2.woocommerce-loop-product__title")
prices = page.css(".价格")
images = page.css(".woocommerce-LoopProduct-link img")
产品数据 = []
for 名称、价格、图像 in zip(名称、价格、图像):
    price_value = price.re_first(r'[d.,] ')
    
    数据 = {
        "name": name.text、
        "price": f "${价格值}",
        "图像": image.attrib["src"],
    }
    product_data.append(data)
for product in 产品数据:
    print(产品)

输出结构:

[
    {"name": "可恶的连帽衫", "price": "$69.00", "图像": "https://...jpg"},
    {"name": "阿尔忒弥斯的短跑", "price": "$45.00", "图像": "https://...jpg"}
]

拆包的局限性

刮削法对于中小型刮削效果很好,但也会遇到一些问题:

  • 无内置代理旋转功能:不支持旋转代理或自动地理定位
  • 基于浏览器的重型搜索资源动态捕获器 和 隐形捕手 使用浏览器实例,消耗大量内存
  • 自适应功能需要手动启用:默认禁用自适应功能,需要明确配置
  • 无扩展基础设施:您需要自己管理并发、重试和分布式刮擦
  • 仅用于自适应的第一要素:保存自适应数据时,只保存第一个元素的属性

扩展技巧:使用明亮数据进行代理管理

要克服 Scrapling 的代理限制,可将其与类似于 Bright Data 或 Oxylabs.这些供应商通常提供 住宅代理轮换 IP和地理定位。我与这些品牌没有任何关联!

FetcherSession 示例:

from scrapling.fetchers 导入 FetcherSession
代理 = {
    "http": "http://username:[email protected]:22225",
    "https": "http://username:[email protected]:22225",
}
with FetcherSession() as 会议:
    页码 = 届会。get(
        "https://www.scrapingcourse.com/ecommerce/",
        代理=代理
    )
    print(page.html_content)

您需要一个具有适当凭证的账户。该集成可帮助您避免 IP 禁止,并以更大的流量进行搜索。

刮擦的最佳做法

需要时启用自适应选择器:使用 自动保存=真 针对可能会因网站更新而中断的关键选择器

选择正确的捕捉器:

  • 捕捉器 静态网站(最快)
  • 动态捕获器 适用于 JavaScript 功能较强的网站,提供基本保护
  • 隐形捕手 适用于具有高级反僵尸系统的网站

使用会话处理多个请求:通过会话类重复使用浏览器实例,减少开销

轮流代理:防止大规模行动中的 IP 屏蔽

添加速率限制:使用 time.sleep() 或队列系统来限制请求

利用内置 Regex:使用 .re() 和 .re_first() 精确提取数据的方法

优雅地处理错误:始终检查响应状态并处理异常

使用 Async 实现并发:杠杆作用 AsyncFetcher 并行请求的异步会话

结论

Scrapling 为您提供了一种更简洁、更灵活的方式来构建 2025 版的刮擦器。它的自适应选择器和多种获取器选项使其成为各种网站的理想选择,从简单的静态页面到具有复杂的反僵尸保护功能的网站。不过,它并非刀枪不入--大规模操作仍需要代理轮转和分布式系统等外部基础设施。

将 Scrapling 与 Bright Data 或其他任何工具配合使用 高质量的旋转代理这样,您就拥有了一个无需持续维护就能应对大多数刮擦挑战的强大设置。该库的模块化设计(自 v0.3.2)意味着您只需安装所需的内容,其 92% 测试覆盖范围可确保可靠性。

有问题要问我?请在评论中告诉我!

 

 

类似文章