Каждая система искусственного интеллекта и машинного обучения в своей основе является аргументом, построенным на данных. Модель не рассуждает исходя из первых принципов; она обобщает по примерам, которые уже видела. Измените примеры, изменится поведение. Именно поэтому наиболее значимым решением в любом ИИ-проекте редко является архитектура или оптимизатор. Им является то, что попадает в обучающую выборку и откуда берутся эти данные.

Долгое время ответом были «несколько чистых академических датасетов». Та эпоха миновала. Большие языковые модели и современные ML-системы, которыми люди пользуются каждый день, обучались на огромных корпусах, собранных из открытого веба: статьи, каталоги товаров, форумы, документация, отзывы, код. Если вы хотите создать что-то конкурентоспособное, рано или поздно вам придётся самостоятельно собирать веб-данные в масштабе и превращать их в обучающие строки. В этой статье объясняется, откуда на самом деле берутся данные для ИИ и ML, почему веб является доминирующим источником и как надёжно собирать их с помощью Crawling API и Smart AI Proxy, а не вручную бороться с блокировками.

ИИ, ML и общая зависимость

Полезно чётко разграничить два термина, поскольку их часто используют взаимозаменяемо, хотя они не одно и то же. Искусственный интеллект, это широкая цель: системы, выполняющие задачи, которые мы ассоциируем с человеческим интеллектом, от ответов на вопросы до управления автомобилем. Машинное обучение, доминирующий метод достижения этой цели. Вместо того чтобы вручную кодировать правила для каждой ситуации, вы даёте алгоритму большой набор примеров и позволяете ему выучить паттерны, отображающие входные данные на выходные.

Машинное обучение разделяется по тому, как помечены эти примеры. Обучение с учителем тренируется на помеченных парах (письмо и метка «спам», страница товара и её категория) и учится воспроизводить метки на новых входных данных. Обучение без учителя не получает меток и вместо этого самостоятельно находит структуру, кластеризуя похожие элементы или сжимая данные в полезные представления. Большие языковые модели, лежащие в основе современного ИИ-бума, активно используют само-обучающийся вариант: модель учится, предсказывая замаскированные токены или следующие токены в сыром тексте, то есть сам текст предоставляет сигнал, и его нужно много.

Единственная константа

Обучение с учителем, без учителя или само-обучение, у каждого подхода одна и та же зависимость: большой, репрезентативный, актуальный датасет. Алгоритм, это в основном фиксированный рецепт. Данные, переменная, определяющая, будет ли результат острым или бесполезным. Именно поэтому «откуда взять данные», это реальный инженерный вопрос, стоящий за большинством ИИ и ML-работ.

Почему модели живут или умирают вместе со своими данными

Соблазнительно считать модель умной частью, а данные, сантехникой. На практике соотношение обратное. Три свойства датасета определяют почти всё, что происходит далее.

Объём. Современные модели имеют миллионы и миллиарды параметров, и каждый параметр, это степень свободы, требующая доказательств для правильной настройки. Слишком мало данных, и модель запоминает примеры вместо обобщения, что является режимом отказа, известным как переобучение. Причина, по которой важны корпуса веб-масштаба, проста: веб, одно из немногих мест, где можно найти достаточно разнообразного текста и структурированных записей, чтобы удовлетворить этот аппетит.

Свежесть. Модель, обученная на снимке трёхлетней давности, считает, что мир выглядит так, как он выглядел три года назад. Цены, ассортимент товаров, сленг, новости и идиомы кода, всё это меняется. Если ваше приложение рассуждает о текущем мире, обучающие и оценочные данные должны быть собраны из текущего веба, а не взяты из устаревшего архива.

Репрезентативность. Модель обучается только на том распределении, которое видит. Соберите данные одного ритейлера, и ваша ценовая модель знает только этого ритейлера; соберите данные двадцати, и она изучит рынок. Предвзятость на входе равна предвзятости на выходе, поэтому широта вашей коллекции напрямую ограничивает, насколько хорошо модель обобщается за пределы собранного среза.

Заметьте, что все три свойства являются проблемами сбора, а не моделирования. Нельзя оптимизировать выход из датасета, который слишком мал, слишком стар или слишком узок. Именно поэтому команды, создающие серьёзные ИИ и ML-системы, тратят столько времени на приобретение данных, и именно поэтому уровень веб-краулинга заслуживает реального внимания.

Откуда берутся данные для ИИ и ML

Обучающие данные для машинного обучения поступают через несколько каналов, и большинство реальных проектов комбинируют несколько.

Курированные публичные датасеты (ImageNet, Common Crawl, открытые государственные данные), хорошая отправная точка и ничего не стоят, но на них обучаются и все остальные, поэтому они редко дают вам преимущество и часто устарели. Ручная разметка и внутренний сбор данных дают высококачественные, специфичные для задачи данные, но они медленные и дорогие и не масштабируются до корпусов веб-масштаба. Лицензированные данные от поставщиков закрывают конкретные пробелы, когда позволяет бюджет.

Для большинства команд решающим источником является открытый веб, собираемый с помощью веб-скрапинга. Веб, крупнейшее, свежайшее и наиболее разнообразное собрание текстов и структурированных записей, и он охватывает практически каждую область, которую вы можете захотеть моделировать: листинги e-commerce для ценовой разведки, отзывы для анализа тональности, вакансии для моделей рынка труда, документацию и ветки форумов для систем кода и Q&A. Загвоздка в том, что надёжный сбор данных сложнее, чем кажется, именно этот пробел и закрывает следующий раздел.

Сложная часть: сбор веб-данных в масштабе

Написать скрипт, получающий одну страницу, тривиально. Написать скрипт, получающий миллион страниц с десятков сайтов неделя за неделей без остановок, это совсем другая задача. Три препятствия появляются почти сразу.

Во-первых, защита от ботов. Коммерческие сайты следят за автоматизированным трафиком и реагируют CAPTCHA, ограничением скорости и блокировкой IP. Наивный скрапер с одного IP датацентра получает пометку в течение нескольких минут, а датасет, который перестаёт заполняться на полпути, это никакой не датасет.

Во-вторых, клиентский рендеринг. Значительная доля современного веба строит свой контент в браузере с помощью JavaScript. Обычный requests.get возвращает HTML-оболочку без нужных данных, поэтому вам нужно что-то, что действительно запускает страницу как настоящий браузер, прежде чем вы сможете её прочитать.

В-третьих, масштаб и надёжность. Прокси нужно ротировать, сбои нужно повторять, а весь пайплайн должен работать без присмотра. Создание и поддержка этой инфраструктуры, большая часть работы, и она не имеет никакого отношения к модели, которую вы хотите обучить.

Именно здесь подходит Crawlbase. Crawling API принимает URL, получает его через ротируемые резидентные IP, рендерит JavaScript в настоящем браузере и возвращает готовый HTML или готовый для LLM markdown в одном вызове. Smart AI Proxy (также называемый AI Proxy) даёт вам ту же резидентную ротацию как сменный прокси-эндпоинт, когда вы предпочитаете маршрутизировать трафик собственного клиента. В любом случае блокировки, рендеринг и управление IP перестают быть вашей проблемой, и вы можете сосредоточить усилия на датасете.

Crawlbase Crawling API

Обучающие данные полезны, только если их можно реально собрать. Crawling API получает страницы через ротируемые резидентные IP и рендерит JavaScript в настоящем браузере, возвращая чистый HTML или markdown из одного вызова, чтобы сбор миллиона страниц продолжал заполняться, а не останавливался на CAPTCHA. Направьте его на публичную страницу в бесплатном тарифе и посмотрите, как строка попадает в ваш датасет.

Создание обучающего датасета: запускаемый пример

Концепциям легче доверять, когда их можно запустить. Скрипт ниже собирает небольшой структурированный датасет с публичного тестового книжного магазина, такого рода каталожные данные, которые можно было бы подать ценовой или категориальной модели. Он получает каждую страницу через Crawling API, извлекает несколько полей и записывает одну строку на элемент как в CSV, так и в JSON, чтобы результат сразу попадал в обучающий пайплайн.

Вам понадобится Python 3.8 или новее и официальный клиент Crawlbase. Установите его и получите токен из панели управления Crawlbase после регистрации.

bash
python -m venv ml_data_env
source ml_data_env/bin/activate

pip install crawlbase beautifulsoup4

В Windows активируйте окружение с помощью ml_data_env\Scripts\activate вместо строки с source. Теперь сборщик. Он обходит несколько страниц каталога, извлекает поля с помощью BeautifulSoup и сохраняет чистые строки.

python
import csv
import json
from crawlbase import CrawlingAPI
from bs4 import BeautifulSoup

api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"})

pages = [
    "https://books.toscrape.com/catalogue/page-1.html",
    "https://books.toscrape.com/catalogue/page-2.html",
    "https://books.toscrape.com/catalogue/page-3.html",
]

def fetch_html(url):
    options = {"ajax_wait": "true", "page_wait": 2000}
    response = api.get(url, options)
    if response["status_code"] != 200:
        raise RuntimeError(f"Fetch failed for {url}: {response['status_code']}")
    return response["body"].decode("utf-8")

def parse_rows(html):
    soup = BeautifulSoup(html, "html.parser")
    rows = []
    for card in soup.select("article.product_pod"):
        title = card.select_one("h3 a")["title"].strip()
        price = card.select_one(".price_color").text.strip()
        rating = card.select_one(".star-rating")["class"][1]
        in_stock = "In stock" in card.select_one(".availability").text
        rows.append({
            "title": title,
            "price": price,
            "rating": rating,
            "in_stock": in_stock,
        })
    return rows

def build_dataset():
    dataset = []
    for url in pages:
        try:
            dataset.extend(parse_rows(fetch_html(url)))
        except RuntimeError as err:
            print(f"Skipping page: {err}")
    return dataset

data = build_dataset()
print(f"Collected {len(data)} rows")

Два параметра ожидания сохраняют работоспособность кода при направлении его на клиентски-рендеримую цель: ajax_wait ждёт асинхронного контента, а page_wait делает паузу фиксированное количество миллисекунд, чтобы поздние элементы появились до захвата. Проверка кода статуса превращает неудачную загрузку в явную ошибку вместо тихо пустой строки, что важно, когда запуск охватывает тысячи страниц и вам нужно доверять тому, что попало в датасет.

Сохранение строк для обучения

Датасет полезен только в формате, который может читать ваш обучающий код. CSV подходит для табличных моделей и быстрого просмотра в таблице; JSON подходит для вложенных записей и большинства Python-пайплайнов. Записывайте оба, чтобы одна коллекция питала любой из путей.

python
def save_csv(rows, path="training_data.csv"):
    if not rows:
        return
    with open(path, "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=rows[0].keys())
        writer.writeheader()
        writer.writerows(rows)

def save_json(rows, path="training_data.json"):
    with open(path, "w") as f:
        json.dump(rows, f, indent=2)

save_csv(data)
save_json(data)
print("Saved training_data.csv and training_data.json")

Запустите два фрагмента вместе, и вы получите чистые, помеченные строки, готовые для модели. Структура намеренно скучная: одна запись на элемент, последовательные ключи, никаких сюрпризов. Именно это и нужно обучающему коду.

json
[
  {
    "title": "A Light in the Attic",
    "price": "£51.77",
    "rating": "Three",
    "in_stock": true
  }
]
Сначала собирайте, потом очищайте

Сырые собранные строки не готовы к обучению сами по себе. Прежде чем модель их коснётся, нужно нормализовать типы (преобразовать строку с ценой в число), удалить дубликаты, обработать пропущенные поля и сбалансировать категории, чтобы выборка была репрезентативной. Шаг сбора здесь даёт вам надёжные сырые данные; следующий шаг, их формирование, которое мы рассматриваем в статье структурирование и очистка веб-скрапингованных данных для ИИ и ML.

От одного скрипта к реальному пайплайну

Приведённый выше пример, демонстрация. Промышленный датасет для искусственного интеллекта и машинного обучения охватывает тысячи или миллионы URL, обновляется по расписанию и не может себе позволить остановок. Три шага приближают вас к этому.

Перейдите на асинхронную работу для больших объёмов. Получение страниц по одной ограничивает пропускную способность скоростью одного цикла запрос-ответ. Для крупных заданий отправляйте URL в асинхронный Crawler, который ставит работу в очередь и отправляет готовые страницы на вебхук по мере завершения, чтобы вы собирали данные в масштабе без управления циклом получения самостоятельно.

Используйте предварительно разобранный вывод там, где он существует. Когда вы регулярно собираете данные с хорошо известных сайтов (крупный ритейлер, платформа вакансий), Crawling API напрямую возвращает структурированный JSON для поддерживаемых целей, избавляя от необходимости писать и поддерживать селекторы. Для нестандартных или разовых компоновок подход с BeautifulSoup, описанный выше, остаётся гибким запасным вариантом. Подробнее о выборе метода сбора под модель читайте в статье веб-скрапинг для машинного обучения.

Относитесь к свежести как к работе, а не к разовой задаче. Поскольку модели деградируют по мере изменения мира, планируйте регулярные обходы и добавляйте новые строки, а не парсите один раз и забываете. Датасет, обновляющийся еженедельно, поддерживает актуальность вашей модели по текущим ценам, текущему языку и текущему поведению.

Если вы подключаете ИИ-агент для получения живого веб-контекста во время инференса, а не только при обучении, Web MCP предоставляет те же возможности получения и разбора через Model Context Protocol, чтобы модель могла напрямую запрашивать страницы. Для очень высоких объёмов или кастомной маршрутизации и SLA корпоративный уровень обеспечивает выделенную пропускную способность.

Итоги

Ключевые выводы

  • Данные, это продукт. В искусственном интеллекте и машинном обучении алгоритм в основном фиксирован; датасет, переменная, определяющая, будет ли модель острой или бесполезной.
  • Объём, свежесть и широта, это проблемы сбора. Нельзя оптимизировать выход из датасета, который слишком мал, слишком стар или слишком узок, поэтому уровень краулинга заслуживает реального внимания.
  • Веб, доминирующий источник. Курированные датасеты и ручная разметка имеют своё место, но открытый веб является крупнейшим, свежайшим и наиболее разнообразным корпусом обучающих данных, собираемых через веб-скрапинг.
  • Надёжный сбор, самая сложная часть. Защита от ботов, клиентский рендеринг и масштаб выводят из строя наивных скраперов; Crawling API и Smart AI Proxy берут на себя блокировки, рендеринг и ротацию IP.
  • Сначала собирайте, потом формируйте. Сохраняйте чистые строки в CSV или JSON, затем нормализуйте типы, удаляйте дубликаты и балансируйте категории перед обучением.
  • Масштабируйте с помощью асинхронности и расписаний. Перекладывайте крупные задания на асинхронный Crawler, повторно используйте предварительно разобранный вывод там, где он существует, и повторяйте обход по расписанию, чтобы датасет оставался актуальным.

Часто задаваемые вопросы

В чём разница между искусственным интеллектом и машинным обучением?

Искусственный интеллект, это широкая цель создания систем, выполняющих задачи, которые мы ассоциируем с человеческим интеллектом. Машинное обучение, доминирующий метод достижения этой цели: вместо ручного кодирования правил вы обучаете алгоритм на большом наборе примеров и позволяете ему выучить паттерны. Таким образом, машинное обучение является подмножеством искусственного интеллекта, и почти все заметные ИИ-системы сегодня построены с его помощью.

Почему веб-скрапинг важен для ИИ и ML?

Модели учатся на примерах, и им нужен большой, свежий и репрезентативный их набор. Открытый веб является крупнейшим и наиболее актуальным источником этих данных, охватывающим почти каждую область, которую вы можете захотеть моделировать. Веб-скрапинг, это способ превратить эти страницы в обучающие строки, вот почему сбор данных является одним из наиболее важных шагов в любом серьёзном ИИ или ML-проекте.

Сколько данных нужно для обучения модели?

Это зависит от модели и задачи: простому классификатору может быть достаточно тысяч строк, тогда как большие языковые модели обучаются на миллиардах токенов. Общее правило: больше параметров требует больше примеров для избежания переобучения, а более широкое покрытие даёт лучшее обобщение. Именно этот аппетит заставляет команды обращаться к сбору данных веб-масштаба, а не к небольшим курированным наборам.

Можно ли просто использовать публичные датасеты вместо скрапинга?

Публичные датасеты, хорошая бесплатная отправная точка, но у них два ограничения: на них обучаются и все остальные, поэтому они редко дают вам преимущество, и они часто устарели. Если ваше приложение рассуждает о текущем мире или нишевой области, вам нужно будет самостоятельно собирать актуальные, специфичные для задачи данные из веба, зачастую наряду с публичными наборами.

Как собирать веб-данные без блокировок?

Наивный скрапер с одного IP датацентра быстро помечается средствами защиты от ботов. Crawling API получает страницы через ротируемые резидентные IP и рендерит JavaScript в настоящем браузере, чтобы сборочные запуски продолжали заполняться, не срабатывая на CAPTCHA и ограничениях скорости. Если вы предпочитаете маршрутизировать трафик собственного клиента, Smart AI Proxy предоставляет ту же ротацию как сменный эндпоинт. Полный план действий, в статье как парсить сайты без блокировок.

Что делать с данными после их сбора?

Сырые собранные строки не готовы к обучению. Вы нормализуете типы данных, удаляете дубликаты, обрабатываете пропущенные поля и балансируете категории, чтобы выборка была репрезентативной, а затем делите её на обучающую и оценочную части. Первоначальное сохранение чистых строк в CSV или JSON, как в примере выше, даёт стабильную базу для очистки и формирования под модель.

Начать создавать

Обходите любой сайт в масштабе, без борьбы с инфраструктурой.

Crawlbase берёт на себя прокси, отпечатки и CAPTCHA, чтобы ваша команда выпускала конвейеры данных вместо поддержки обвязки краулинга. 1 000 запросов бесплатно, без карты.

Самообслуживание · Звонок отдела продаж не требуется · Доступны корпоративные объёмы краулинга