在扩展您的网络抓取流程时,您需要考虑使用可靠、高效且易于管理的解决方案,无论您抓取的数据量有多少。
由于涉及的数据量巨大,大多数开发人员在处理大规模数据抓取时都会遇到挑战。你的代码原本在小型项目中运行良好,但突然出现故障、卡住或无法维护的情况。
那是在哪里 Crawlbase 加入我们。我们的解决方案专为促进平稳过渡而设计。您无需从头开始重写所有内容,也无需彻底改变工作流程。如何操作?我们将为您详细讲解。
目录
为什么缩放在网页抓取中如此重要
在小规模上,网页数据抓取的过程很简单。你只需编写脚本,向几个网页发送请求,抓取工具就会按顺序执行任务。然而,一旦你尝试扩大项目规模,抓取数千甚至数百万个网页的数据,事情就开始变得复杂起来。
扩展不仅仅是重复做同样的事情,而是要做得更多。它需要你用智慧去做。你必须牢记一些常见的扩展问题,例如:
- 速率限制
- 并发问题
- 重试挑战
- 代码效率问题
- 储存限制
如果您忽略这些问题,您的抓取工具今天可能可以工作,但明天当您的数据需求增长或目标站点发生变化时,它就会崩溃。
您首先需要做出的决定之一是使用同步还是异步抓取。仅凭这一选择就能彻底解决大部分扩展问题,并影响扩展的速度和效率。
如何在同步和异步网页抓取之间进行选择
在构建可扩展的抓取工具时,发送和处理请求的方式至关重要。在小型项目中,同步抓取可能没问题。然而,随着项目的扩展,选择正确的方法可能会决定抓取工具是快速高效,还是陷入停滞或阻塞。
同步网页抓取
同步抓取是一个非常简单的过程。你发送请求,等待响应,处理数据,然后继续下一个请求。一切都一步一步地进行,就像排队等待轮到你一样。
这种方法很容易实现,非常适合小规模的工作或测试,因为:
- 代码易于阅读和调试
- 由于请求按顺序发生,因此更容易管理错误
- 您不必担心并发或任务协调
Crawlbase“ Crawling API 是一个能够完成任务的同步爬虫的优秀示例。但是,随着规模的扩大,同步爬虫可能会成为瓶颈。你的爬虫会花费大量时间等待服务器响应、等待超时、等待重试。所有这些等待加起来就很耗时了。
异步网页抓取
异步抓取意味着您可以发送多个请求,系统会一次性处理或执行这些请求,而不是等待每个请求完成后再执行下一个请求。这种方法对于扩展至关重要,因为它消除了等待网络响应的空闲时间。
从实际意义上讲,这意味着更高的吞吐量、更好的资源利用率以及更快地抓取大量数据的能力。
Crawlbase 提供一个专门构建的异步爬取和抓取系统,简称为 Crawler。它旨在处理大量抓取,让您可以同时推送多个要抓取的 URL,而无需管理复杂的基础设施。
下面是它的工作原理:
- - Crawler 是一个基于回调的推送系统。
- 您将要抓取的 URL 推送到 Crawler 使用 Crawling API.
- 每个请求都分配有一个 RID(请求 ID),以帮助您在整个过程中对其进行跟踪。
- 任何失败的请求都会自动重试,直到收到有效的响应。
- - Crawler 将把结果 POST 回服务器上的 webhook URL。
- Crawler 为您提供实现异步抓取的强大方法。它可以并行处理多个页面,并自动重试失败的请求。这意味着可以同时解决速率限制、并发和重试问题。
您应该怎么做才能扩大网页抓取规模?
Crawlbase“ Crawling API 是一款出色的工具,能够可靠地处理数百万个请求。它专为大规模数据抓取而设计,如果您需要对每个请求进行直接、即时的响应,它将是您的理想之选。它易于实施,非常适合中小型作业、快速脚本以及对实时结果至关重要的集成。
然而,当你处理企业级抓取、数百万个 URL、严格的并发需求以及对强大队列的需求时,使用 Crawler 更有意义。
- Crawler 专为海量数据抓取而设计。它具备可扩展性,支持并发处理和自动重试,并可根据您的需求进行扩展。
因此,您应该这样扩展:
使用以下方式构建可扩展的抓取工具 Crawling API 当你:
- 需要实时结果
- 您是否在执行较小的任务
- 更喜欢更简单的请求-响应模型
然后,过渡到 Crawler 当你:
- 需要处理数千或数百万个 URL
- 想要同时处理多个请求
- 想要从你的终端卸载重试过程
- 您是否正在构建可扩展的生产级数据管道
简而言之,如果您的目标是真正的可扩展性,那么从同步抓取转向异步抓取 Crawler 是最好的选择。
如何设置可扩展 Crawler
在本节中,我们将为您提供分步指南,包括如何构建可扩展的 Web 爬虫的最佳实践。请注意,我们选择使用 Python 进行演示,并使用 长颈瓶 和 小姐,因为这种方法既轻量又更容易实现。
让我们开始。
Python 要求
- 设置基本的 Python 环境。 安装Python 3 在你的系统上。
- 安装所需的依赖项。您可以下载此文件并在终端中执行以下命令:
1 | python -m pip 安装请求 flask 女服务员 |
- 对于我们的 网络挂接, 安装并配置 ngrok。这是使 webhook 公开可访问所必需的 Crawlbase.
Webhook 集成
步骤 1:创建文件并命名 webhook_http_server.py
,然后复制并粘贴以下代码:
1 | 在 烧瓶 进口 长颈瓶 |
查看上面的代码,以下是我们在 webhook 方面遵循的一些良好做法:
- 我们只接受
HTTP POST
请求,这是 webhook 的标准。 - 我们检查重要的标题,例如
rid
,Original-Status
及PC-Status
在 Crawlbase 响应 以确保请求具有正确的信息。 - 我们忽略了 虚拟请求 在 Crawlbase。这些只是发送的“心跳”消息,用于检查您的 webhook 是否启动并正在运行。
- 我们还寻找自定义标题
My-Id
值为常数REQUEST_SECURITY_ID
。此值只是一个字符串,您可以根据需要编写任何值以增强安全性。使用此标头是 保护你的 webhook,因为它会验证收到的回复是否真实且是否是针对您的。 - 最后,实际任务由单独的线程处理,使我们能够在 200 毫秒内快速回复。此设置应该能够每秒处理大约 200 个请求,不会出现问题。
步骤 2:添加以下剩余代码。这是实际数据来自 Crawlbase 被处理并保存。为简单起见,我们使用文件系统来跟踪已抓取的请求。或者,您可以使用 数据库 或 Redis。
1 | DEF handle_webhook_request(请求内容): |
这部分代码巧妙地将一个已完成的爬网作业从 Crawlbase,将文件组织在自己的文件夹中,保存注释和实际网站数据,并在出现任何问题时通知您。
步骤 3:通过配置完成代码 女服务员套餐 运行服务器。这里我们使用端口 5768
监听传入的请求,但您可以将其更改为您喜欢的任何值。
1 | if __名字__ == “__主要的__”: |
以下是我们的完整脚本 webhook_http_server.py
好像:
1 | 在 烧瓶 进口 长颈瓶 |
步骤4:使用以下命令运行我们的临时公共服务器。
1 | 恩格罗克 http 5768 |
ngrok 会给你一个链接或 “转发 URL” 您可以分享 Crawlbase 所以它知道将结果发送到哪里。

提示: 当你想在生产环境中使用它(而不仅仅是为了测试)时,最好在公共服务器上运行你的 webhook,并使用类似的工具 nginx的 为了安全性和可靠性。
步骤 5:运行 Webhook HTTP 服务器。
1 | python webhook_http_server.py |
这将启动我们的 Webhook HTTP 服务器,准备接收数据 Crawlbase.

步骤6:设定您的 Crawlbase 帐户。
- 立即注册 查阅 Crawlbase 帐户和 添加您的帐单详细信息 激活 Crawler.
- 创建一个新的 Crawler 点击这里. 复制之前第 4 步中 ngrok 提供的转发 URL,并将其粘贴到回调 URL 字段中。
- 选择 正常请求(TCP) 达到本指南的目的。

如何处理大规模数据
现在我们的 webhook 已经上线,可以大规模抓取网络数据了。我们将编写一个脚本,让你可以快速将网站列表发送到 Crawlbase。如果出现临时问题,它还会自动重试请求。
步骤 1:基本抓取请求
创建一个新的 Python 文件并将其命名为 crawl.py
复制并粘贴此代码:
1 | 在 路径库 进口 途径 |
脚本的这一部分发生了什么?
每次抓取请求发送到 Crawlbase,它会创建一个以 rid
这种方法使您能够跟踪您的抓取请求,从而可以轻松地将结果与其原始 URL 进行匹配。
此外,在提交请求时,我们添加了一个名为 My-Id
价值为 REQUEST_SECURITY_ID
.
步骤 2:错误处理和重试逻辑
编写可扩展的爬虫程序时,务必确保其能够处理错误,并包含某种逻辑来重试任何失败的请求。如果不处理这些问题,整个流程可能会因为一个小故障而停止。
下面是一个例子:
1 | 进口 次 |
使用以下方式包装您的网络请求 retry_operation
确保它自动重试 max_retries
出现错误时的时间。
1 | DEF 执行请求(): |
步骤3:批处理技术
当发送数千个 URL 时,最好将 URL 分成几个小组,并一次只发送一定数量的请求。我们将通过 BATCH_SIZE
每秒的值。
1 | DEF 批量抓取(网址): |
在本部分中,将同时处理一批请求,以加快处理速度。一批请求完成后,脚本会短暂等待(DELAY_SECONDS
),然后再开始下一批数据。这是一种处理大规模网页抓取的有效方法。
这是完整的代码。复制此代码并覆盖你的 crawl.py
文件中。
1 | 在 路径库 进口 途径 |
步骤 4:运行你的 Web Crawler.
1 | python crawl.py |
输出示例:

在MyCAD中点击 软件更新 Webhook HTTP 服务器 终端控制台,您应该看到以下类似的输出:

这个过程会产生 data
目录,其中包含一个名为 <rid>
对于每个抓取请求:

-
<rid>
文件包含抓取的数据。-
<rid>.meta.json file
包含相关元数据:
计费示例:
1 | { |
获取 完整代码见 Github.
Crawler 维护和监控
扩展型网络爬虫启动并运行后,需要进行适当的监控和维护,以确保其可扩展且高效。以下是一些需要考虑的事项:
物业管理 Crawler 流量
Crawlbase 提供了一套完整的 API,可让您执行以下操作:
- 暂停或取消暂停爬虫
- 清除或删除作业
- 检查活动作业和队列大小
欲了解更多详情,您可以探索 Crawler API文件.
此外,如果您的爬虫程序似乎出现滞后或意外停止,您可以监控其延迟或自最早的作业添加到队列以来的时间差 Crawler仪表板。如果需要,您也可以直接从该页面重新启动您的爬虫程序。
监控工具
使用这些工具来跟踪您的 Crawler 活动并在问题影响规模之前发现问题。
- Crawler 數據表 - 查看 TCP 或 JavaScript 的当前成本、成功和失败计数 Crawler.
- 实时监控 - 查看实时活动,包括成功抓取、失败、队列大小和待处理的重试。
- 重试监视器 - 查看正在重试的请求的详细描述。
请注意: 仪表板上显示的失败尝试代表内部重试逻辑。您无需担心如何处理它们,因为系统会自动请求失败的作业进行重试。
Crawler 极限
以下是缩放时要记住的默认值:
- 推送速率限制: 每秒 30 个请求
- 并发: 10 个同时作业
- 重试次数: 每个请求尝试 110 次
- - 所有队列的合并限制 Crawlers 是 1 万页。如果达到此限制,系统将暂时暂停推送请求,并在队列清除时自动恢复。
请注意,这些限制可以根据您的具体要求进行调整。请联系 Crawlbase 技术支持 请求升级。
使用以下工具扩展您的 Web 抓取 Crawlbase
网络抓取项目已经发展到超越编写健壮脚本和管理代理的阶段。您需要一个既合法合规,又能适应现代商业世界不断变化的需求的企业级基础架构。
Crawlbase 专为性能、可靠性和可扩展性而设计。通过其解决方案,像您一样的企业和开发者能够获取切实可行的增长洞察。
常见问题 (FAQ)
问:我可以创建自己的吗? Crawler 网络钩子?
是的,为了扩展网页抓取,为你的 Crawler。我们建议您查看我们的完整指南 使用方法 Crawlbase Crawler 学习如何。
问:我可以测试 Crawler 免费?
目前,您需要 添加您的帐单详细信息 首先使用 Crawler. Crawlbase 在您注册时默认不提供免费积分 Crawler,但您可以联系客户支持申请免费试用。
问:处理网页抓取中的动态内容的最佳实践是什么?
想要在网页抓取中处理动态内容吗?以下是一些值得牢记的最佳实践:
利用 API: 查看网络活动,看看数据是否来自内部 API。这种方法通常更快捷、更可靠。
策略性等待: 不要依赖硬编码的超时,而是使用智能等待策略,例如
waitForSelector
orwaitForNetworkIdle
在继续操作之前,请确保所有元素都已完全加载。使用 Scraping API: 像工具一样 Crawlbase 可以为您处理动态内容、管理渲染、JavaScript 执行甚至反机器人措施,让您的生活更轻松。
问:在网页抓取中轮换代理的最佳实践是什么?
现在,如果您对网页抓取中轮换代理的最佳实践感到好奇,那么您应该考虑以下几点:
明智地使用住宅或数据中心代理: 根据目标网站选择合适的代理类型。住宅代理更难检测,但成本也更高。
自动旋转: 在几个请求之后或经过一定秒数后设置自动 IP 轮换,以保持最新状态。
避免单个IP过载: 将您的请求均匀分布在不同的代理上,以避开可能引起反机器人系统警报的模式。
监控代理健康状况: 密切关注响应时间、状态代码和成功率,以发现并替换任何失败的代理。
使用托管代理解决方案: 类似的服务 Crawlbase 提供内置代理管理和轮换,因此您不必处理手动设置。
问:处理来自网络抓取的大型数据集的最佳实践是什么?
在处理来自网络抓取的大型数据集时,有几种最佳实践可以发挥显著的作用。以下是一些需要牢记的技巧:
使用分页和批处理: 不要一次性抓取所有内容,而是使用页面参数或日期范围将任务拆分成更小的块。这有助于防止服务器过载或出现内存问题。
增量存储数据: 将抓取的数据直接传输到数据库或云存储中。这样,您可以避免内存过载,并使所有内容井然有序。
尽早规范化和清理数据: 在抓取数据时,花点时间清理、删除重复数据并构建数据结构。这将减轻您后续处理的负担。
实施重试和日志系统: 监控所有抓取失败的 URL,并建立一个稍后重试的系统。记录抓取数据也有助于追踪进度并发现问题。
使用可扩展的基础设施: 考虑使用异步抓取、作业队列或无服务器函数来处理更大的任务。类似这样的工具 Crawlbase 可以帮助您扩展数据提取,而无需管理后端资源的麻烦。