
Заинтересовался задачей автоматизации сбора и проведения небольшого анализа вакансий IT-специалистов в России. После беглого исследования пришел к выводу, что удобных бесплатных и расширяемых инструментов нет и решил написать свой на Python. В качестве источника идей, прежде всего для графиков, использовал проект hh_research Александра Капитанова.
HH Inspector получился универсальным и может быть использован широким кругом пользователей в качестве базы для решения своих задач, поэтому выкладываю его в качестве open-source проекта. Все подробности - ниже.
Постановка задачи
В качестве источника данных для получения вакансий берём крупнейший российский ресурс Хэдхантер (hh.ru), тем более, что у них есть хорошее открытое API и довольно приличная документация.
Список требований к функционалу нашего инструмента:
Поиск вакансий по различным параметрам: ключевые слова, специализация, регион, зарплатная вилка, опыт работы.
Сохранение данных по вакансиям в форматах JSON, CSV для дальнейшей обработки.
Выдача различной статистики (по зарплатам, ключевым словам и т.п.) на экран.
Рисование графиков по распределению зарплат.
Пример вывода списка найденных вакансий на экран

Процесс
Глядя на требования, сразу видим 4 компонента, на которые логично разбить всю систему:
Модуль работы с параметрами и настройками (Settings)
Модуль сбора данных о вакансиях (Data Collector)
Модуль анализа и рисования графиков (Analyzer)
Управляющий модуль (Main)
Первоначально была идея задавать параметры поиска в командной строке, но скоро стало понятно, что это неудобно, так как возможных параметров оказалось много + нужна возможность установить фиксированные значения для ряда параметров и пользоваться ими снова и снова. Можно было бы использовать формат JSON, но отсутствие в стандарте возможности вставлять комментарии делает его неудобных для конечного пользователя. В итоге форматом для задания параметром поиска был выбран YAML.
Также я решил использовать для параметров поиска те имена и значения, которые выбрали разработчики HeadHunter API, чтобы не усложнять себе задачу. Они не всегда user-friendly, например, числовые кодификаторы, но поскольку наш инструмент рассчитан на IT-специалистов, это допустимо.
Большинство работодателей не указывают в своих вакансиях зарплаты, а некоторые указывают только верхнюю или нижнюю границу. Если нам нужно получить примерную картину по зарплатам, можно использовать флаг only_with_salary
. При расчете средних и медианных значений отсутствующие зарплаты игнорируются. Также в выходных данных показана зарплата "на руки", и если в вакансии указана зарплата до вычета налогов, то автоматически из суммы вычитается 13%.
Поле "Описание вакансии" (description
) изначально представляет собой html-текст. При сохранении в локальных данных все html-теги удаляются, никакое дополнительное форматирование не производится.
Поля вакансии
Headhunter API выдает большое количество информации по вакансиям (включая подробную информацию о работодателе), нужность тех или иных полей зависит от конкретного применения. Я отобрал только самые на мой взгляд интересные.
Поле | Тип | Описание |
---|---|---|
vacancy_id | str | Id вакансии |
region | str | Регион (страна или населенный пункт) |
employer_name | str | Наименование работодателя |
employer_city | str | Город работодателя (если есть) |
accredited_it | bool | Это аккредитованная ИТ-компания? |
vacancy_name | str | Название вакансии |
salary_from | int | Зарплата (нижняя граница) |
salary_to | int | Зарплата (верхняя граница) |
experience | str | Требуемый опыт работы |
employment | str | Тип занятости (полная, частичная) |
schedule | str | Режим работы |
key_skills | list[str] | Список ключевых навыков |
description | str | Подробное описание вакансии |
vacancy_url | str | URL вакансии на сайте hh.ru |
published_at | str | Дата публикации |
Основные настройки
Параметры поиска вакансий задаются в файле config.yaml
в секции query
. Подробные комментарии описывают допустимые значения для каждого поля и значения по умолчанию.

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

Пример вывода графиков по зарплатам

Исходные тексты и инструментарий
Исходные тексты проекта HH Inspector выложены в Github репозитории. Комментарии и предложения приветствуются.
Для работы программы нужен Python 3.13.
Для управления зависимостями используется uv
, для проверки кода и форматирования - ruff
и pyright
, для тестирования - pytest
. Работу с настройками упрощает Pydantic settings
, анализ и подготовку данных для графиков - pandas
.