返回博客

机器学习数据集的数据收集:如何在不被封锁和验证码的情况下抓取数千个页面

我们讨论如何收集大量数据用于机器学习数据集,避免封禁和验证码——选择哪些代理以及如何建立流程。

📅2026年3月14日
```html

ML 模型的质量直接取决于训练数据的质量和数量。但是,一旦您开始收集数千个页面,网站就会开始封锁请求,显示验证码并封禁 IP。在本文中,我们将讨论如何建立一个可靠的数据收集管道以用于数据集:使用哪些工具,如何绕过保护,以及哪种类型的代理适合每个任务。

为什么网站会封锁数据收集以及该如何应对

当您启动自动数据收集时,网站看到的不是普通用户,而是来自同一 IP 地址的请求流。这立即引起了保护系统的警觉 — Cloudflare、DataDome、PerimeterX 和其他反机器人解决方案。结果是:验证码、临时封锁或完全封禁 IP。

对于 ML 项目来说,这个问题尤其严重,因为数据集需要 不仅仅是 100 页,而是数万页。即使是简单的文本分类模型,至少需要 5,000–10,000 个示例。对于计算机视觉 — 需要数十万张图像。用一个 IP 收集如此庞大的数据量在物理上是不可能的。

保护系统分析以下参数:

  • 请求频率 — 从一个 IP 地址每分钟超过 10–20 个请求就显得可疑。
  • User-Agent 和头部信息 — 解析器的标准头部信息很容易被识别。
  • 缺少 Cookie 和会话数据 — 真实浏览器总是携带历史记录。
  • IP 的地理位置 — 来自荷兰数据中心的 IP 在俄语网站上看起来很可疑。
  • 行为模式 — 人类阅读页面的时间为 30–60 秒,而机器人为 0.3 秒。

解决方案是正确的代理、IP 轮换和模拟真实用户行为的组合。我们将详细讨论每个元素。

ML 数据集的数据来源:主要来源

在讨论工具之前,重要的是要了解 — 数据是从哪里来的。来源可以分为几类,每一类都需要不同的方法。

开放数据集(无需解析)

首先要检查的是已经存在的开放数据集。Kaggle、Hugging Face Datasets、Google Dataset Search、UCI Machine Learning Repository 包含数千个现成的数据集。如果您的任务是标准的(文本分类、对象识别、情感分析),那么可能已经存在数据集。这可以节省数周的工作。

网页解析(需要代理)

当现成的数据不可用或不符合您的规格时 — 需要解析。典型任务包括:

  • 从 Wildberries、Ozon、Yandex.Market 收集评论以进行情感分析
  • 解析新闻网站以训练语言模型
  • 收集商品图像以用于计算机视觉模型
  • 从 hh.ru、SuperJob 解析职位以进行 HR 模型
  • 从市场收集价格数据以进行预测模型
  • 解析社交网络(VK、Twitter/X)以进行 NLP 任务

平台 API(部分封闭)

一些平台提供官方 API — Twitter/X API、Reddit API、Google Places API。问题是:它们价格昂贵,有限制,并且通常不免费提供所需的数据量。因此,许多 ML 团队将 API 与解析结合使用。

合成数据

另一种方法是使用 GPT-4 或其他 LLM 生成合成数据。但为此仍然需要真实数据作为基础(few-shot 示例)。因此,解析仍然是大多数 ML 项目的基本数据收集工具。

无代码数据收集工具

好消息是:收集 ML 数据集的数据不一定需要成为开发人员。现在有现成的无代码和低代码工具,可以与代理一起使用并绕过基本保护。

无代码解析器

工具 适合什么 代理支持 难度
Octoparse 网站、表格、分页 ✅ 是
ParseHub 动态网站(JS) ✅ 是
Apify 100+ 网站的现成演员 ✅ 内置 中等
Bright Data IDE 复杂的受保护网站 ✅ 内置 中等
Scrapy Cloud 大规模解析 ✅ 通过中间件

对于大多数 ML 数据收集任务,Octoparse 或 Apify 足够了。Octoparse 允许您在 20–30 分钟内可视化设置解析器:指定页面上的元素,设置分页,插入代理 — 然后启动收集。结果以 CSV 或 JSON 格式导出,可以立即用于训练。

如果需要解析流行平台,Apify 特别方便:他们有现成的“演员”用于 Instagram、Twitter/X、亚马逊、谷歌地图、LinkedIn 和其他数十个网站。您只需设置参数 — 就可以获得结构化数据。

为 ML 数据集选择哪种类型的代理

选择代理类型是数据收集成功的关键因素之一。这里的错误代价高昂:要么您在半途中被封锁,要么您为不必要的能力支付过高的费用。我们将讨论三种主要类型。

住宅代理 — 用于受保护的网站

住宅代理 是来自真实家庭用户的 IP 地址。对于反机器人系统,它们与普通访客无异。这使得它们非常适合解析具有强大保护的网站:市场(Wildberries、Ozon)、社交网络、新闻聚合器。

对于 ML 任务的主要优势:可以收集带有地理位置的数据。如果您在区域内容上训练模型 — 选择来自俄罗斯或其他国家的所需区域的代理。这对于地理分类或区域方言分析任务尤其重要。

移动代理 — 用于社交网络和移动平台

移动代理 使用移动运营商的 IP(4G/5G)。它们在平台上具有最高的信任度 — 因为一个移动 IP 实际上被数百人同时使用(所有同一基站的用户通过同一个 IP 访问)。这意味着,即使是从移动 IP 进行的积极数据收集看起来也很正常。

如果您从 VK、TikTok 或 Instagram 收集数据 — 这些平台会积极封锁数据中心的 IP,因此移动代理尤其需要。

数据中心代理 — 用于开放来源和速度

数据中心代理 速度快且便宜。它们与真实用户无关,因此更容易被保护系统识别。但是对于许多 ML 任务来说,这已经足够:如果您解析维基百科、开放档案、GitHub、公共 API 或没有强大保护的网站 — 数据中心代理表现出色,且费用显著更低。

如何为您的 ML 任务选择代理类型:

  • 市场(Wildberries、Ozon、Avito): 住宅代理与轮换
  • 社交网络(VK、Instagram、TikTok): 移动代理
  • 新闻网站、论坛、维基百科: 数据中心代理
  • 谷歌搜索、Yandex: 住宅或移动代理
  • 开放档案、Common Crawl: 数据中心代理

实用场景:文本、图像、价格、评论

我们将讨论针对流行类型的 ML 任务的具体数据收集场景 — 指出来源、工具和所需的代理类型。

场景 1:用于情感分析的评论数据集(NLP)

任务:从 Wildberries 收集 50,000 条带评分的评论,以训练情感分类模型。

来源: Wildberries — 带有 1–5 星评分的商品评论(理想的标注已经存在)。
工具: Octoparse 或使用 requests 库的现成 Python 脚本。
代理: 住宅代理与轮换 — Wildberries 积极封锁数据中心的 IP。
收集速度: 每 3–5 秒 1 个请求,带间隔 — 50,000 条评论在 2–3 天内完成。

您将获得: CSV 文件,包含以下列:评论文本、评分(1–5)、商品类别、日期。这是一个现成的训练数据集 — 标注已嵌入数据中。

场景 2:用于计算机视觉的图像数据集

任务:收集 100,000 张来自多个类别的商品图像,以训练分类模型。

来源: Ozon、Yandex.Market — 带有类别的商品照片。
工具: Apify(有现成的电商演员)或 ParseHub。
代理: 住宅代理,按地区轮换在俄罗斯。
重要: 通过代理下载图像,而不是直接下载 — CDN 服务器也会封锁大规模下载。

您将获得: 按类别划分的图像文件夹 — 结构直接被 Keras 的 ImageDataGenerator 或 PyTorch 的 DataLoader 接受。

场景 3:用于语言模型的文本语料库

任务:收集大量俄语文本以进行特定主题的语言模型微调(fine-tuning) — 例如,法律文本或医学文章。

来源: 主题论坛、新闻网站、Habr、专业门户。
工具: Scrapy Cloud 或 Octoparse 进行结构化收集。
代理: 数据中心代理与轮换 — 大多数文本网站没有严格的保护,速度比匿名性更重要。
速度: 使用数据中心代理可以每分钟进行 50–100 个请求,并在几天内收集到一百万个文档。

场景 4:用于 HR 模型的职位数据集

任务:从 hh.ru 收集 200,000 条职位信息,以训练推荐或职业分类模型。

来源: hh.ru — 他们有官方 API,但有限制。对于大规模数据,需要解析。
工具: Apify(有 hh.ru 的演员)或 Octoparse。
代理: 住宅代理 — hh.ru 保护良好并封锁数据中心的 IP。
您将获得: 结构化数据:职位名称、描述、薪资、要求、地区、行业 — 适用于 NLP 和推荐系统的优秀数据集。

如何在大规模数据收集中避免封锁

即使使用良好的代理,如果不遵循基本规则,也可能会被封锁。以下是经过验证的方法,可以帮助您稳定且无损地收集数据。

IP 和会话轮换

最重要的规则是:不要使用同一个 IP 进行数千个请求。设置轮换,使每 10–50 个请求更换一次 IP。大多数工具(Octoparse、Apify、Scrapy)在连接代理池时都支持这一点。

另外,随着 IP 的变化,改变会话 Cookie — 这模拟了一个新用户,而不仅仅是更改地址。

请求之间的正确延迟

在请求之间添加随机延迟 — 不要固定 2 秒,而是从 1 到 5 秒的随机延迟。固定的间隔很容易被检测为机器人模式。随机延迟 — 模拟人类行为。

对于特别受保护的网站,添加更长的暂停:每 100 个请求后暂停 30–60 秒。这会降低速度,但会显著减少被封锁的风险。

正确的请求头部信息

将 User-Agent 设置为最新的浏览器(Chrome、Firefox 最新版本)。添加标准的 HTTP 头部信息:Accept-Language、Accept-Encoding、Referer。缺少这些头部信息是大多数保护系统明显的机器人标志。

在非工作时间收集

在夜间(莫斯科时间 2:00 到 6:00)启动大规模收集。在此期间,网站的流量最低,反机器人系统的攻击性较低,而您的请求占据了更大的负载比例 — 这反而降低了怀疑,因为竞争流量较少。

错误处理和重试

设置自动响应代码处理:

  • 429(请求过多) — 增加延迟,切换 IP,等待 5–10 分钟。
  • 403(禁止访问) — IP 被封锁,务必更换代理。
  • 503(服务不可用) — 服务器暂时过载,1–2 分钟后重试。
  • 200 带验证码 — 需要更高质量的代理(住宅代理而不是数据中心代理)。

代理与网站的地理匹配

使用与目标网站相同国家的代理。如果您解析 Wildberries — 选择俄罗斯的 IP。如果您从德国网站收集数据 — 需要德国代理。地理位置不匹配是封锁的最常见触发因素之一。

清单:为 ML 设置数据收集管道

在启动任何大规模数据收集之前,请使用此清单:

📋 准备

  • ☐ 检查 Kaggle / Hugging Face 上是否有现成的数据集
  • ☐ 研究目标网站的 robots.txt
  • ☐ 确定数据量和数据集结构
  • ☐ 选择解析工具(Octoparse、Apify、Scrapy)
  • ☐ 根据任务选择代理类型(住宅 / 移动 / 数据中心)

⚙️ 设置

  • ☐ 连接带有 IP 轮换的代理池
  • ☐ 设置 User-Agent(最新的 Chrome/Firefox)
  • ☐ 添加标准的 HTTP 头部信息
  • ☐ 设置随机延迟(1–5 秒)
  • ☐ 设置错误处理(429、403、503)
  • ☐ 指定数据导出格式(CSV、JSON、JSONL)

🧪 测试

  • ☐ 启动 100–500 条记录的测试
  • ☐ 检查数据的质量和完整性
  • ☐ 确保在测试量上没有封锁
  • ☐ 检查收集速度并计算完整数据集的时间

🚀 启动和监控

  • ☐ 在夜间启动(02:00–06:00 MSK)
  • ☐ 设置错误通知
  • ☐ 定期检查收集数据的质量
  • ☐ 保存中间结果(每 10,000 条记录的检查点)

🧹 后处理

  • ☐ 删除重复项
  • ☐ 从文本中清除 HTML 标签和特殊字符
  • ☐ 检查类的平衡(对于分类任务)
  • ☐ 拆分为训练/验证/测试集
  • ☐ 以与您的 ML 框架兼容的格式保存

结论

收集 ML 数据集的数据不是一次性任务,而是一个系统过程。本文的主要结论是:正确选择代理决定了您是否能够完成任务,或者在封锁中停滞。住宅代理适用于受保护的市场和聚合器,移动代理适用于社交网络,数据中心代理适用于开放的文本来源。像 Octoparse 和 Apify 这样的工具可以在不编写代码的情况下建立管道。而遵循基本规则(IP 轮换、随机延迟、正确的头部信息)可以在没有损失的情况下收集数十万条记录。

如果您计划从市场、新闻网站或主题门户收集数据以训练 ML 模型,我们建议您从 住宅代理 开始 — 它们提供了来自保护系统的最高信任级别,并且即使在大规模数据收集中也具有最低的封锁风险。

```