Однажды мне стало интересно, а что если попробовать проанализировать вакансии и составить по ним некоторые топы. Узнать кому больше всех платят, кто наиболее востребован и много чего еще. В качестве источника данных я использовала всем известный HeadHunter. Были собраны и обработаны вакансии за май этого года. Только за месяц, потому что API не позволяет получить больше. HeadHunter API имеет отличную документацию, которая расположена в репозитории. Запросы должны осуществляться на домен https://api.hh.ru/ с установленным User-Agent, желательно вида название_приложения/версия_приложения (емейл_для_связи) (иногда срабатывают другие варианты User-Agent, но если серверу что-то не понравится, он вернет ошибку). Логика сбора очень простая, поэтому я реализовала её на bash с использованием cURL и jq. Однако хочу поделиться несколькими нюансами. Для поиска вакансий по различным параметрам имеется эндпоинт GET /vacancies. Результаты поиска будут разбиты на страницы, за размер которых отвечает параметр per_page (20 по умолчанию и 100 максимум). Выбрать конкретную страницу можно, указав параметр page (нумерация начинается с 0). В поле pages служебной информации, возвращаемой вместе с вакансиями, будет указано общее количество страниц результата. С помощью этого можно легко перебрать все страницы: Однако, результаты поиска содержат лишь часть данных о вакансиях. Чтобы получить все, нужно совершить отдельный запрос на эндпоинт вида GET /vacancies/id_вакансии. Частичные данные о вакансиях находятся в поле items результатов поиска. Сначала соберем из них ID вакансий: Затем запросим полную информацию о соответствующих вакансиях по отдельности: У HeadHunter API есть одна особенность — сколько бы ни было найдено, возвращено будет максимум 2000. При этом реальное найденное количество так же возвращается в поле found результатов поиска. Благодаря этому, можно точно узнать, получил ли ты все запрошенные данные, или есть потери. Чтобы обойти данное ограничение, я придумала следующее. При поиске можно задать отрезок времени, когда публиковались интересующие вакансии (через параметры date_from и date_to, которые принимают дату в формате ISO 8601). Можно взять маленький промежуток и перебрать такими кусочками все результаты: ведь чем меньше интервал времени, тем меньше вакансий успели за него опубликовать. Стоит обратить внимание, что возвращаются вакансии, опубликованные только за последний месяц. Поэтому нет смысла задавать диапазон больше. Для перебора отрезков времени последнее лучше всего представлять в виде Unix time: Для сбора статистики требовалось группировать вакансии по определённым признакам. На bash это делать было уже проблематично, поэтому я воспользовалась Python. Логика сбора ничего особенного собой не представляет — накопление данных в ассоциативном массиве, сортировка и вывод в CSV. Однако, снова несколько нюансов. Нужно обратить внимание, что зарплата представлена в виде двух чисел — минимальной и максимальной, причем любое из них может отсутствовать. Так как для анализа нужно было иметь одно число, я решила использовать нижнюю границу, и только если она отсутствует, верхнюю. Зарплата в вакансии может быть указана в разных валютах, а они — иметь разный курс. HeadHunter API имеет эндпоинт GET /dictionaries, содержащий все необходимые предопределенные значения. Курсы валют представлены в поле currency. Для удобства работы будет лучше поместить их список в ассоциативный массив, где ключом будет буквенный код валюты: Теперь, во время обработки, будет легко сконвертировать все зарплаты в одну валюту: В некоторых вакансиях зарплата указана до выплаты НДФЛ, в некоторых — после. О конкретном варианте говорит поле gross: оно равно true в первом случае и false — во втором. Я решила перевести все зарплаты в вариант после уплаты налога: А теперь самое время показать цифры. Наверное, многие из тех, кто читает этот пост, хотели бы работать на удалёнке. Но как видим, работа из дома у нас в стране пока не очень котируется. Зарплата сильно ниже, количество вакансий ощутимо меньше. А стало быть меньше и возможность выбора для соискателя. И это достаточно странно, ибо во многих профессиях и многих фирмах (по специфике задач) присутствие человека в офисе совсем не нужно. Но это вечный спор.  Однако, есть ещё более малочисленная категория вакансий — для людей с инвалидностью. И уж это совсем нелогично — пусть работодатели не хотят удалёнщиков, но из тех, кто готов на такое, почему так мало, кто думает о людях с ограниченными возможностями? Если вам всё равно, что человек в трёх часовых поясах, какая вам разница, в состоянии ли он, например, ходить? Возможно, многие из вас знакомы с людьми, имеющими инвалидность. Я тоже, и мне стало интересно, насколько сложно им найти работу, и на что вообще они могут рассчитывать.  Все мы с чего-то начинаем, а именно с поиска работы, не имея никакого опыта. Решила оценить ситуацию с позициями, открытыми для таких кандидатов. Количество вакансий обнадёживает на быстрое трудоустройство. И не знаю насколько реально получить максимальный оклад, но на средние цифры даже можно как-то жить.  А теперь самое интересное: кому же платят больше всех? Отсортировала все найденные вакансии без каких-либо фильтров. Конечно же это высший менеджмент. Кто бы сомневался. Любопытный факт: если обратить внимание на среднюю зарплату во всех таблицах, то можно заметить, что она не так уж сильно отличается.  А вот и самый простой путь: зачем учиться 5 лет, если можно просто помыть офис? Ниже результат фильтрации топа вакансий по запросу «уборщ*». Что, если устроиться в несколько контор и приходить вечерком на пару часов для уборки? Так можно довольно роскошно жить. Будем считать это лайфхаком.  Напоследок я решила проверить количество открытых вакансий по городам. Первые места удивления не вызывают, а вот дальше есть любопытные и даже неожиданные позиции.  Весь код из статьи, с улучшениями и инструкцией, доступен в репозитории. Программист