- PVSM.RU - https://www.pvsm.ru -

Заинтересовался задачей автоматизации сбора и проведения небольшого анализа вакансий IT-специалистов в России. После беглого исследования пришел к выводу, что удобных бесплатных и расширяемых инструментов нет и решил написать свой на Python. В качестве источника идей, прежде всего для графиков, использовал проект hh_research [1] Александра Капитанова.
HH Inspector получился универсальным и может быть использован широким кругом пользователей в качестве базы для решения своих задач, поэтому выкладываю его в качестве open-source проекта [2]. Все подробности - ниже.
В качестве источника данных для получения вакансий берём крупнейший российский ресурс Хэдхантер (hh.ru [3]), тем более, что у них есть хорошее открытое 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 [3] |
|
published_at |
str |
Дата публикации |
Параметры поиска вакансий задаются в файле config.yaml в секции query. Подробные комментарии описывают допустимые значения для каждого поля и значения по умолчанию.

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

Исходные тексты проекта HH Inspector выложены в Github репозитории [4]. Комментарии и предложения приветствуются.
Для работы программы нужен Python 3.13.
Для управления зависимостями используется uv, для проверки кода и форматирования - ruff и pyright, для тестирования - pytest. Работу с настройками упрощает Pydantic settings, анализ и подготовку данных для графиков - pandas.
Документация на сайте [5]hh.ru [3] с примерами запросов [5]
Github репозиторий [6]hh.ru [3] с документацией [6]
Автор: PeterH
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/423357
Ссылки в тексте:
[1] hh_research: https://github.com/hukenovs/hh_research
[2] open-source проекта: https://github.com/peternest/hh-inspect
[3] hh.ru: http://hh.ru
[4] Github репозитории: https://github.com/peternest/hh-inspect.git
[5] Документация на сайте : https://api.hh.ru/openapi/redoc
[6] Github репозиторий : https://github.com/hhru/api
[7] Источник: https://habr.com/ru/articles/920942/?utm_source=habrahabr&utm_medium=rss&utm_campaign=920942
Нажмите здесь для печати.