В современном цифровом мире данные являются одним из самых ценных активов. Компании, которые умеют эффективно собирать, анализировать и использовать информацию, получают неоспоримое конкурентное преимущество. Одним из ключевых методов получения данных из открытых источников, таких как веб-сайты, является парсинг.
Парсинг (от английского parsing — синтаксический анализ, разбор) — это процесс автоматизированного сбора и структурирования информации с веб-сайтов при помощи специальной программы, называемой парсером.1 Если представить веб-сайт как огромную библиотеку с тысячами книг на полках, то парсер — это ваш личный робот-библиотекарь. Вы даете ему четкое задание: найти все книги (данные) по определенной теме (например, все вакансии для программистов в Москве), извлечь из них конкретную информацию (название, автор, год издания) и сложить ее в аккуратную стопку в виде структурированной таблицы.
Технически процесс выглядит следующим образом: парсер отправляет запрос к веб-странице, точно так же, как это делает ваш браузер. В ответ сервер сайта отдает HTML-код этой страницы. Затем парсер анализирует этот код, находит в нем заранее определенные фрагменты данных (например, текст внутри тегов с определенным классом) и извлекает их, сохраняя в удобном для дальнейшей обработки формате, например, в таблицу Excel или базу данных.2
На рынке труда, где информация о вакансиях, зарплатах и требованиях к кандидатам меняется ежедневно, парсинг становится мощным инструментом для решения целого ряда бизнес-задач:
В России доминирующей платформой для поиска работы и подбора персонала является HeadHunter (hh.ru).3 На момент подготовки данного отчета на сайте размещено свыше 1.1 миллиона актуальных вакансий и более 86 миллионов резюме от 2.2 миллионов компаний.4 Такой масштаб делает hh.ru не просто сайтом для поиска работы, а де-факто главной базой данных о состоянии российского рынка труда. Ценность этой информации заключается не в отдельных вакансиях, которые можно просмотреть вручную, а в возможности анализировать весь массив данных целиком. Именно парсинг позволяет раскрыть этот потенциал, выявляя тренды, зависимости и закономерности, невидимые при обычном использовании сайта.
Для эффективного сбора данных необходимо четко понимать, какая именно информация доступна на сайте и как она структурирована. Данные на hh.ru можно условно разделить на две большие категории: данные о вакансиях и данные о резюме. Эти категории имеют принципиально разную структуру и, что более важно, разный правовой статус.
При поиске вакансий на hh.ru пользователь видит список, где каждая позиция представлена в сокращенном виде. Уже на этом этапе можно извлечь значительный объем полезной информации.
Данные на странице списка вакансий:
При переходе на страницу конкретной вакансии открывается расширенный набор данных, который представляет наибольший интерес для анализа.
Данные на странице отдельной вакансии:
Систематизировав эти поля, можно составить «карту данных» для каждой вакансии, которая послужит основой для технического задания на разработку парсера.
Таблица 1: Структура данных вакансии на hh.ru
Поле данных | Тип данных | Пример | Источник |
ID вакансии | Числовой | 123188170 | URL страницы |
Название вакансии | Текст | Frontend Developer / Фронтенд-разработчик | 5 |
URL вакансии | URL | https://hh.ru/vacancy/123188170 | 5 |
Зарплата «от» | Число | 180000 | 5 |
Зарплата «до» | Число | 220000 | 5 |
Валюта | Текст | ₽ | 5 |
Налоговый статус | Текст | на руки | 5 |
Название компании | Текст | WILDBERRIES | 5 |
URL компании | URL | https://hh.ru/employer/87021 | 5 |
Рейтинг компании | Число | 3.4 | 5 |
Город | Текст | Москва | 5 |
Адрес | Текст | Москва, Марксистская | 5 |
Требуемый опыт | Текст | 3-6 лет | 5 |
Полное описание | Текст | «Мы ищем опытного разработчика для…» | 8 |
Ключевые навыки | Список | JavaScript, React, HTML, CSS | 9 |
Дата публикации | Дата/Время | 2025-07-24T10:00:00 | 10 |
В отличие от вакансий, которые являются обезличенными данными о предложениях компаний, резюме содержат информацию о конкретных физических лицах. Это коренным образом меняет их правовой статус.
Ключевые поля данных в резюме:
Фундаментальное различие между вакансиями и резюме заключается в том, что практически каждое поле в резюме подпадает под определение «персональные данные» согласно российскому законодательству. Это не случайное совпадение, а прямое следствие природы этих данных. Вакансия описывает юридическое лицо (компанию), в то время как резюме описывает физическое лицо (человека). Федеральный закон № 152-ФЗ «О персональных данных» определяет их как «любую информацию, относящуюся к прямо или косвенно определенному или определяемому физическому лицу».12 Таким образом, любой автоматизированный сбор данных из резюме является обработкой персональных данных, что накладывает строжайшие юридические ограничения.
Таблица 2: Структура данных резюме и их классификация по ФЗ-152
Поле из резюме | Пример | Категория по ФЗ-152 | Необходимость получения согласия |
ФИО | Иванов Иван Иванович | Общие ПДн | Обязательно |
Телефон | +7 (999) 999-99-99 | Общие ПДн | Обязательно |
ivan.ivanov@email.com | Общие ПДн | Обязательно | |
Фотография | (изображение лица) | Биометрические ПДн | Обязательно (в письменной форме) |
Город проживания | Москва | Общие ПДн | Обязательно |
Опыт работы | ООО «Ромашка», инженер | Общие ПДн | Обязательно |
Образование | МГУ, 2010 | Общие ПДн | Обязательно |
Эта таблица наглядно демонстрирует, почему парсинг резюме является операцией с высоким правовым риском. В отличие от парсинга вакансий, где основной вопрос лежит в плоскости нарушения правил сайта, здесь в игру вступает федеральное законодательство, защищающее права граждан.
Существует два принципиально разных подхода к автоматизированному сбору данных с HeadHunter: официальный, через предоставленный платформой API, и неофициальный, путем прямого парсинга HTML-страниц сайта. Выбор между этими подходами определяет не только техническую реализацию проекта, но и его легальность, стабильность и итоговую стоимость.
Самый цивилизованный, надежный и, что самое главное, законный способ получения данных с hh.ru — это использование официального API (Application Programming Interface).14
API можно сравнить с официантом в ресторане. Вместо того чтобы самому бежать на кухню, разбираться в кастрюлях и искать нужные ингредиенты (что аналогично прямому парсингу), вы делаете заказ по меню (документация API). Официант (сервер API) принимает ваш заказ (запрос), передает его на кухню (в базу данных hh.ru) и приносит вам готовое, красиво оформленное блюдо (структурированные данные в формате JSON). Этот процесс полностью контролируется владельцем «ресторана» (HeadHunter), что гарантирует порядок и предсказуемость.
Для начала работы с API необходимо выполнить несколько шагов:
HeadHunter API предоставляет широкий набор методов («endpoints») для работы с данными 14:
Однако ключевым фактором при работе с API являются лимиты и квоты. HeadHunter, как и любая другая крупная платформа, ограничивает количество запросов, которые одно приложение может совершать за определенный промежуток времени. Это делается как для защиты серверов от перегрузки, так и для контроля за использованием данных.
Таблица 3: Ключевые лимиты HeadHunter API
Тип лимита | Значение | Примечание | Источник |
Максимум записей в выдаче | 2000 | На один поисковый запрос можно получить не более 2000 вакансий (20 страниц по 100 вакансий). | 18 |
Элементов на странице | 100 | Максимальное количество вакансий, возвращаемое на одной странице результатов. | 18 |
Запросов в секунду | 30 | Ограничение на частоту запросов от одного приложения/пользователя. | 19 |
Просмотров резюме в сутки | 500 | На одного менеджера компании. Требует платного доступа к базе резюме. | 17 |
Эти лимиты означают, что собрать абсолютно все вакансии с сайта за короткий промежуток времени через API невозможно. Например, чтобы обойти ограничение в 2000 записей на запрос, необходимо дробить один большой запрос на множество мелких, более специфичных (например, по разным районам города или узким специализациям). Это делает процесс сбора данных более медленным и сложным, но по-прежнему осуществимым и легальным.
Ниже приведен упрощенный пример кода на языке Python, демонстрирующий, как получить список вакансий по запросу «Python» в Москве с помощью официального API.
import requests
import json
# URL для поиска вакансий через API
url = 'https://api.hh.ru/vacancies'
# Параметры запроса: текст поиска, регион (1 - Москва), количество на странице
params = {
'text': 'NAME:Python',
'area': 1,
'per_page': 100
}
# Заголовки запроса, включая User-Agent для идентификации
headers = {
'User-Agent': 'MyCoolApp/1.0 (my-email@example.com)'
}
# Отправка GET-запроса к API
response = requests.get(url, params=params, headers=headers)
# Проверка, что запрос успешен (код ответа 200)
if response.status_code == 200:
# Преобразование ответа из JSON в словарь Python
data = response.json()
# Вывод количества найденных вакансий
print(f"Найдено вакансий: {data['found']}")
# Перебор полученных вакансий и вывод их названий и зарплат
for vacancy in data['items']:
salary_info = "Зарплата не указана"
if vacancy.get('salary'):
salary = vacancy['salary']
currency = salary.get('currency', '')
if salary.get('from') and salary.get('to'):
salary_info = f"от {salary['from']} до {salary['to']} {currency}"
elif salary.get('from'):
salary_info = f"от {salary['from']} {currency}"
elif salary.get('to'):
salary_info = f"до {salary['to']} {currency}"
print(f"- {vacancy['name']} ({salary_info})")
else:
print(f"Ошибка выполнения запроса: {response.status_code}")
Данный код является демонстрационным и требует адаптации для реальных задач.
Наличие публичного, но строго лимитированного API 14 в сочетании с существованием сторонних платных сервисов-парсеров (например, на платформе Apify 20) свидетельствует о сложившейся вокруг данных hh.ru бизнес-экосистеме. Платформа не столько борется с фактом программного доступа к данным, сколько стремится его контролировать и монетизировать. Лимиты API служат не только технической мерой защиты, но и бизнес-инструментом, который подталкивает крупных потребителей данных к заключению партнерских соглашений или покупке дорогостоящих корпоративных тарифов, предоставляющих расширенный доступ. Это создает экономическое и правовое напряжение, при котором ограничения официального канала косвенно стимулируют появление «серого» рынка парсинга, с которым hh.ru вынужден бороться уже юридическими методами.
Прямой парсинг HTML-страниц — это альтернативный, неофициальный метод сбора данных, который заключается в имитации действий обычного пользователя или поискового робота. Этот подход позволяет обойти лимиты API, но сопряжен с серьезными техническими и юридическими трудностями.
Процесс прямого парсинга включает в себя загрузку полного HTML-кода веб-страницы и последующий его анализ для извлечения нужных данных.2 Разработчик «объясняет» программе, в каких именно элементах HTML-разметки находится нужная информация (например, «возьми текст из тега <span> с классом vacancy-salary»).
Однако современные сайты, и hh.ru в их числе, активно противодействуют автоматическому сбору данных. Это порождает технологическую «гонку вооружений», где разработчики парсеров постоянно ищут способы обойти новые меры защиты. Основные сложности включают:
На каждом сайте существует файл robots.txt, в котором владелец ресурса указывает, какие разделы сайта не следует индексировать автоматическим программам (поисковым роботам). Это своего рода «джентльменское соглашение». Изучение файла robots.txt на сайте hh.ru 22 показывает, что компания просит роботов не посещать определенные служебные разделы.
Важно понимать, что robots.txt не имеет юридической силы и не может технически запретить парсинг. Однако его сознательное игнорирование является первым и явным признаком «неэтичного» сбора данных и может быть использовано против парсера в суде как доказательство злого умысла.
В пользовательском соглашении hh.ru прямо запрещает «использование программных средств, имитирующих работу пользователя» и «использование функций парсинга».23 Это означает, что платформа активно отслеживает и блокирует подобные попытки, используя для этого сложные алгоритмы, которые могут анализировать даже такие параметры, как скорость и траектория движения курсора мыши. Следовательно, любой парсер, созданный для обхода этих правил, по определению является хрупким и требует постоянного обслуживания для адаптации к новым мерам защиты, что создает для бизнеса операционные риски и непредсказуемые затраты.
Ниже приведен упрощенный пример кода, демонстрирующий логику извлечения названий вакансий со страницы поиска hh.ru с помощью библиотек requests и BeautifulSoup4.
import requests
from bs4 import BeautifulSoup
# URL страницы с вакансиями
url = 'https://hh.ru/search/vacancy?text=Python&area=1'
# Заголовки, имитирующие запрос от реального браузера
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# Отправка GET-запроса
response = requests.get(url, headers=headers)
# Проверка, что запрос успешен
if response.status_code == 200:
# Создание объекта BeautifulSoup для парсинга HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Поиск всех тегов 'a' с определенным классом, содержащих ссылки на вакансии
# Примечание: классы могут измениться, что сломает парсер.
# На момент написания отчета использовался класс 'serp-item__title'.
vacancy_links = soup.find_all('a', {'class': 'serp-item__title'})
print(f"Найдено вакансий на странице: {len(vacancy_links)}")
# Вывод названий вакансий
for link in vacancy_links:
print(f"- {link.get_text()}")
else:
print(f"Ошибка загрузки страницы: {response.status_code}")
Данный код является демонстрационным, его селекторы могут устареть. Он не предназначен для промышленного использования.
Выбор между использованием официального API и разработкой собственного парсера — это стратегическое решение, которое должно основываться на взвешенной оценке целого ряда факторов. Для наглядности сведем их в единую сравнительную таблицу.
Таблица 4: Сравнение: API против прямого парсинга hh.ru
Критерий | Официальный HeadHunter API | Прямой парсинг HTML-страниц |
Легальность | Высокая. Полностью законный и поощряемый платформой способ. | Критически низкая. Прямо запрещено пользовательским соглашением 23, нарушает права на базу данных и законодательство о ПДн. |
Стабильность | Высокая. API имеет версионирование. Изменения вносятся предсказуемо и анонсируются. | Низкая. Парсер ломается при любом изменении верстки сайта, что происходит без предупреждения. |
Стоимость разработки | Низкая. Требуется прочитать документацию и написать несколько стандартных запросов. | Средняя/Высокая. Требуется разработка сложной логики обхода блокировок, решения капчи, работы с динамическим контентом. |
Стоимость поддержки | Нулевая. API поддерживается и обновляется силами HeadHunter. | Высокая. Требуются постоянные затраты на доработку парсера, оплату прокси-серверов и сервисов решения капчи. |
Объем/скорость данных | Ограничены. Скорость и объем сбора данных жестко лимитированы квотами.18 | Потенциально не ограничены. Позволяет собирать данные быстрее и в большем объеме, но только до момента блокировки. |
Типы доступных данных | Только разрешенные. Доступны только те данные, которые hh.ru счел нужным предоставить через API.10 | Любые видимые. Можно собрать любую информацию, которая отображается на странице, включая ту, что не доступна через API. |
Риски | Минимальные. Риски связаны в основном с превышением лимитов, что ведет к временной блокировке токена. | Критически высокие. Юридические риски (многомиллионные иски), технические (постоянные сбои) и репутационные (обвинения в незаконной деятельности). |
Эта таблица однозначно показывает, что, несмотря на кажущееся преимущество прямого парсинга в скорости и объеме получаемых данных, этот подход сопряжен с неприемлемо высокими рисками и затратами. Для любого легально работающего бизнеса единственным разумным выбором является использование официального API.
Вопрос парсинга данных с HeadHunter лежит не столько в технической, сколько в юридической плоскости. В российском правовом поле существует как минимум три уровня защиты, которые делают несанкционированный сбор данных крайне рискованным предприятием. Это пользовательское соглашение самого сайта, законодательство об интеллектуальной собственности (в частности, о базах данных) и федеральный закон о персональных данных.
Первый и самый очевидный барьер — это правила, установленные самим владельцем ресурса. В документе «Условия использования сайтов» (также известном как оферта), который каждый пользователь принимает по умолчанию, просто заходя на сайт, содержатся пункты, напрямую запрещающие автоматизированный сбор данных.23
В разделе, посвященном информационной безопасности, пользователю запрещается:
С юридической точки зрения, использование сайта является акцептом (принятием) условий этой публичной оферты. Следовательно, нарушение этих правил является нарушением договорных обязательств перед ООО «Хэдхантер».
Последствия такого нарушения могут быть различными:
Хотя нарушение пользовательского соглашения является самым простым для доказывания со стороны hh.ru, это лишь первый и самый «слабый» уровень правовой защиты. Гораздо более серьезные риски лежат в плоскости нарушения федеральных законов.
Сайт HeadHunter, с его миллионами структурированных и систематизированных вакансий и резюме, с точки зрения российского законодательства является не просто сайтом, а объектом интеллектуальной собственности — базой данных. Это понятие закреплено в статье 1260 Гражданского кодекса РФ, которая определяет базу данных как «представленную в объективной форме совокупность самостоятельных материалов…, систематизированных таким образом, чтобы эти материалы могли быть найдены и обработаны с помощью электронной вычислительной машины (ЭВМ)».24
Закон предоставляет базам данных два уровня защиты:
Статья 1334 ГК РФ прямо устанавливает, что никто не вправе без разрешения правообладателя «извлекать из базы данных материалы и осуществлять их последующее использование».31 Под «извлечением» понимается перенос на другой носитель «всего содержания базы данных или существенной части составляющих ее материалов».29 Понятие «существенная часть» является оценочным и может трактоваться судом как в количественном (например, парсинг тысяч вакансий), так и в качественном отношении (например, парсинг всех вакансий в узкой, но высокооплачиваемой нише).
Ответственность за нарушение этого права весьма серьезна: правообладатель (в данном случае hh.ru) вправе потребовать от нарушителя по своему выбору либо возмещения убытков, либо выплаты компенсации в размере от 10 тысяч до 5 миллионов рублей.32
Риск такого иска не является теоретическим. Он подкреплен реальной судебной практикой, которая будет рассмотрена в отдельной главе. Этот прецедент показывает, что суды готовы защищать инвестиции владельцев онлайн-платформ, и hh.ru, в случае спора, сможет опереться на уже сформированную правовую позицию.
Если парсинг вакансий сопряжен с риском нарушения правил сайта и прав на базу данных, то парсинг резюме выводит ситуацию на совершенно иной уровень риска, напрямую затрагивая Федеральный закон № 152-ФЗ «О персональных данных». Как уже было показано в Главе 2, резюме содержат огромное количество информации, которая однозначно квалифицируется как персональные данные (ПДн): ФИО, контакты, фото, сведения об образовании и опыте работы.12
Ключевым моментом, который необходимо понимать каждому, кто рассматривает возможность парсинга резюме, являются поправки к ФЗ-152, вступившие в силу 1 марта 2021 года.33 Эти поправки фактически ликвидировали прежнее понятие «общедоступных персональных данных».35 До 2021 года существовала лазейка, позволявшая утверждать, что если человек сам разместил свои данные в открытом доступе (например, в соцсети или на сайте с резюме), то их можно свободно собирать и использовать.
Теперь это не так. Новый порядок, установленный статьей 10.1 ФЗ-152, гласит, что для обработки персональных данных, «разрешенных субъектом для распространения», оператор (тот, кто собирает данные) обязан получить от человека отдельное, явное и конкретное согласие именно на распространение и дальнейшую обработку. Простого факта публикации данных самим человеком больше недостаточно.
Это создает непреодолимый барьер для легального парсинга резюме. Чтобы законно спарсить даже 1000 резюме, компания должна была бы предварительно найти каждого из этих 1000 соискателей и получить от них письменное согласие на сбор и обработку их данных из профиля на hh.ru. Очевидно, что в промышленных масштабах это невыполнимая задача.
Таким образом, любой несанкционированный массовый сбор данных из резюме является прямым нарушением ФЗ-152. Ответственность за такие нарушения постоянно ужесточается и может быть весьма суровой.
Таблица 5: Виды ответственности за нарушение ФЗ-152 (ст. 13.11 КоАП РФ)
Состав правонарушения | Субъект | Размер штрафа (руб.) | Источник |
Обработка ПДн без письменного согласия субъекта (когда оно обязательно, например, для биометрии — фото) | Граждане | 10 000 – 15 000 | 36 |
Должностные лица | 100 000 – 300 000 | 36 | |
Юридические лица | 300 000 – 700 000 | 36 | |
Обработка ПДн в случаях, не предусмотренных законодательством, либо обработка, несовместимая с целями сбора | Граждане | 2 000 – 6 000 | 36 |
Должностные лица | 10 000 – 20 000 | 36 | |
Юридические лица | 60 000 – 100 000 | 36 | |
Повторное совершение указанного выше правонарушения | Юридические лица | до 18 000 000 (оборотный штраф) | 36 |
Незаконный сбор и распространение сведений о частной жизни (ст. 137 УК РФ) | — | до 200 000 или лишение свободы до 2 лет | 36 |
Как видно из таблицы, финансовые риски для юридического лица колоссальны и могут достигать миллионов рублей, не говоря уже о потенциальной уголовной ответственности для руководителей. Это делает любой бизнес-проект, основанный на парсинге резюме, незаконным по своей сути и фундаментально неустойчивым. Единственным законным оператором этих персональных данных является само ООО «Хэдхантер», которое получает необходимое согласие от пользователя в момент регистрации на сайте.4
Анализ законов и пользовательских соглашений может показаться теорией, но в России уже существует знаковый судебный прецедент, который наглядно демонстрирует реальность правовых рисков парсинга. Речь идет о многолетнем споре между социальной сетью «ВКонтакте» и компанией «Дабл Дата» (дело № А40-18827/2017).37
Дело прошло несколько инстанций, но итоговая позиция, сформированная Судом по интеллектуальным правам, была однозначной: суд встал на сторону «ВКонтакте».37 Ключевые выводы суда, которые имеют прямое отношение к парсингу hh.ru:
Этот судебный кейс фактически «похоронил» главный аргумент всех, кто занимается парсингом: «если данные лежат в открытом доступе, я могу их брать». Он создал в России мощный судебный прецедент. Если HeadHunter решит подать в суд на компанию, занимающуюся парсингом их сайта, их юридическая позиция будет чрезвычайно сильной. Аргументация «ВКонтакте» практически полностью применима к hh.ru:
Учитывая наличие прецедента по делу «ВКонтакте», вероятность того, что hh.ru выиграет такой суд, стремится к 100%. Это превращает теоретические правовые риски в весьма осязаемую угрозу судебного преследования и многомиллионных компенсаций.
Всесторонний анализ технических методов и правового поля позволяет сделать однозначный вывод: несанкционированный парсинг данных с платформы HeadHunter в российской юрисдикции является деятельностью с критически высоким уровнем риска. Эти риски можно разделить на три взаимосвязанные категории.
На основе проведенного анализа можно сформулировать четкие и однозначные рекомендации для любого бизнеса, который планирует работать с данными HeadHunter.
Подводя итог, можно с уверенностью заявить, что эпоха «дикого запада» в области парсинга данных в России подходит к концу. Законодательство и судебная практика однозначно встают на защиту прав владельцев крупных баз данных и, что еще важнее, на защиту персональных данных граждан.
Бизнес-модели, построенные на несанкционированном извлечении информации с таких платформ, как HeadHunter, являются фундаментально неустойчивыми и несут в себе экзистенциальные риски. Погоня за «бесплатными» данными может обернуться многомиллионными штрафами, судебными издержками и крахом репутации. В современных реалиях единственной разумной, дальновидной и стратегически верной политикой является работа в строгом соответствии с законом и правилами, установленными платформами, то есть использование официальных API и построение честных партнерских отношений.
Краткое резюме: как превратить сеть сайтов в стабильный источник дохода Создание сети информационных сайтов —…
Знаете ли вы, что невидимые технические ошибки могут «съедать» до 90% вашего потенциального трафика из…
Введение: почему мониторинг цен — необходимость, а защита — не преграда Представьте, что вы пытаетесь…
Значительная часть трафика на любом коммерческом сайте — это не люди. Это боты, которые могут…
Систематический мониторинг цен конкурентов — это не просто способ избежать ценовых войн, а доказанный инструмент…
Краткое содержание В мире, где 93% потребителей читают отзывы перед покупкой 1, а рейтинг компании…