Pull to refresh

Автоматизация сбора и анализа вакансий с сайта Хэдхантер

Level of difficultyEasy
Reading time3 min
Views724

Заинтересовался задачей автоматизации сбора и проведения небольшого анализа вакансий 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.

Документация по API Хэдхантер

Tags:
Hubs:
0
Comments3

Articles