Я спарсил 62 000 Python-вакансий с hh.ru и узнал страшное

в 8:16, , рубрики: hh.ru, pandas, python, sql, анализ данных, аналитика, зарплаты, парсинг, рынок труда, статистика

Привет! (И тебе, HR, который ставит в вакансию «Python, SQL, Linux, Docker, K8s, Spark, Airflow, английский C1, опыт 1-3 года, зарплата 40-60К». Особенно тебе.)

Сегодня будем препарировать рынок Python-разработки в России. По-настоящему. С графиками, цифрами и верой в светлое будущее.

Поехали.

P.S Если вводная часть того как я анализировал не интересна смело переходи к главе 2, не мучай себя избыточной информацией))

P.P.S Так же хочу зарее предупредить, что многие наблюдения я могу утрировать, высмеивать. Но неизменными и честными остаются данные на графиках и таблицах. Так что если вам нужна серьёзность и точность данных, листайте смотрите и не читайте, я предупредил))

Глава 0. Зачем я это сделал и почему пожалел

Идея была простая: «А давай посмотрим, сколько на самом деле платят Python-разработчикам в России?». Звучит как пятничный pet-project на вечер. По факту - это были 9 месяцев парсинга, со всеми возможными приколами, то я накосячил и оставил разделитель csv в виде запятой, даже не задумавшись, что запятые в тексте везде, то hh API заблокировали и с апреля я наблюдаю статус 403 и мой план собрать большую аналитику за 1, а то и 2 года сорвался. Ну ладно, и так сойдёт, эта аналитика оказалась как и предполагалось весьма интересной и для новичков в IT и для тех кто уже долго крутиться на этом рынке. Так что едем дальше...

Что хотелось узнать:

  • Сколько правда платят?

  • Где платят больше?

  • Какие навыки сейчас в тренде, а какие пора удалять из резюме?

  • Кто идеальный кандидат «по версии hh» и можно ли таким стать без продажи почки?

Вкратции для шустрых комментаторов - что получилось узнать:

  • Сыктывкар платит больше Москвы (нет, но да, но нет).

  • В Тбилиси медианная зарплата Data Scientist - 450 000 ₽ (n=4, конечно, но звучит).

  • Python как навык за 8 месяцев подешевел на 7.9 п.п. в Python-вакансиях. Сами вдумайтесь.

  • HR-ы Краснодара решили, что вилка 30К-80К - это нормальная вилка для одной вакансии.

Но обо всём по порядку.

Глава 1. Боль сбора данных: как hh.ru мне подставил

Изначально план был такой: парсим данные раз в две-четыре недели, копим год, потом красиво анализируем. Чисто и наивно.

Что пошло не так (всё):

  1. Запятая как разделитель в CSV. Гениальное решение для языка, в котором запятая - это половина пунктуации. Спасибо, прошлый я. Первый датасет пришлось переразбивать руками-регулярками.

  2. hh.ru в апреле 2026 убил API для вакансий. Просто вот так. Парсишь ты вечером, всё хорошо, утром просыпаешься -403 Forbidden, finita la commedia. Поэтому моя «коллекция» обрывается на апреле 2026. Это уже не датасет - это археологический срез последнего открытого месяца((( Плак-плак.

  3. Распределение по датам - это слёзы статистика. Вот моя «равномерная» выборка:

Дата

Вакансий

2025-10-05

9434

2025-08-01

8793

2025-09-01

8599

2026-04-07

6635

2026-01-26

6474

2026-03-23

5990

2026-02-10

5288

2025-12-04

4769

2026-01-27

2819

2026-02-11

1680

2026-02-09

1526

2025-12-03

346

2026-04-08

250

Да, в ноябре я чем-то был серьёзным занят. Если кто из работодателей нанимал в ноябре - извините, вас в моих данных нет.

Итого: ~62 тысячи вакансий, 9 месяцев, запрос Python (поиск по навыку). Стек - Python, pandas, matplotlib, sklearn, networkx, Jupyter в VS Code, локально, без облаков. Олдскул.

Ну на вводной части всё, фух..., теперь к тому ради чего мы здесь все собрались.

Глава 2. Что у нас по цифрам и кто все эти люди?

Прежде чем погружаться в зарплатные ужасы и географические аномалии, давайте посмотрим на рынок с высоты птичьего полёта. У меня в датасете два графика, которые отвечают на два самых базовых вопроса: «сколько вакансий?» и «кому они вообще нужны?». И оба графика, как водится, поднимают больше вопросов, чем ответов.

Динамика Python-вакансий по месяцам (2025-2026)

Динамика Python-вакансий по месяцам (2025-2026)

Мы видим среднее: 7825 вакансий в месяц. Звучит солидно. Пока не посмотришь на разброс.

Что бросается в глаза:

  1. Октябрь - пик найма. Бюджеты на следующий год ещё не утвердили, но «доедать» текущий нужно срочно. Классика корпоративной логики: «деньги остались - нанимаем, иначе срежут в следующем квартале».

  2. Декабрь - провал в -40%. 5115 вакансий против 9434 в октябре. HR-ы массово ушли в новогодний корпоратив прямо с середины декабря, и до 15 января их не существует как класса. Если вы искали работу в декабре 2025 - соболезную, рынок физически был закрыт.

  3. Январь - взрыв +82% за месяц. Самый резкий месячный рост за весь период наблюдения. Это не «рынок ожил» - это HR-ы вернулись из отпусков и одновременно опубликовали всё, что копили месяц. Если вы junior и думаете «когда искать работу» - получается ответ: январь-февраль. Не сентябрь, не «после праздников», а именно январь, пока пик ещё не съели быстрые соискатели.

  4. А что в Апреле? - в апреле всё, API быстренько отключили для парсинга вакансий, вот и мы видим только то что получилось успеть собрать.

Вывод для тех, кто ищет работу: рынок Python - это синусоида с периодом «новогодние праздники». Хочешь много вакансий - пиши резюме в январе. Хочешь спокойно собеседоваться без конкуренции - в декабре (только готовься, что отвечать будут после 15 января, и это нормально).

Вообщем по этому графику мы видим относительно предсказуемую картину. Идём смотреть дальше...

Теперь второй график. И вот он уже не «забавный», а скорее слегка пугающий.

Топ-10 IT-ролей в python по количеству

Топ-10 IT-ролей в python по количеству

Топ-10 покрывает 73.4% рынка. Остальные 26.6% размазаны примерно по 60 другим ролям - от «Геолога» до «Агента по недвижимости». Да-да, в Python-вакансиях. Сейчас разберём, как такое возможно.

Что важного видно:

1. «Программист» - это 27.7% рынка. Один из четырёх. Категория «Программист, разработчик» на hh - это огромный размытый ярлык, под который HR валит всё подряд: бэкенд, фронт, скрипт-кидди, embedded, geek-в-одной-каске. По факту это не роль, это «мы не знаем, как назвать, но нам нужен кто-то с Python». Когда в категории «Программист» вилка 30К-800К и медиана 150К - это не статистика, это шум.

2. Аналитиков больше, чем тестировщиков и дата-сайентистов вместе. Если сложить BI-аналитика (4984) + Аналитика (2309) + смежные - получается, что аналитика данных на hh почти догоняет разработку. И это не «вкатуны» - это реальные позиции с медианой 130-140К. Junior-у, который выбирает «куда вкатиться», стоит обратить внимание: вакансий аналитиков на единицу конкуренции, скорее всего, больше, чем у разработчиков.

3. Учитель Python - 2.5% рынка (1548 вакансий). Полторы тысячи вакансий за 8 месяцев. Это больше, чем тех. поддержка. Вот они, эти 1548 счастливых работодателей, каждый со своим понятием о справедливой оплате преподавания Python. От 30К за вечерние курсы до 200К в корпоративном университете - и всё это одна категория на hh.

4. «Другое» - 3589 вакансий, 5.7%. Внутри «Другого», лежит дикая смесь: от геймдева до промышленной автоматизации, от QA-автоматизаторов, которых не пометили QA, до криптотрейдеров. Вообщем те кого мало в РФ... Хотя криптотрейдеров сейчас развелось, но не об этом))

5. Системный администратор - 2568 вакансий с медианой 130К. Удивил. Я думал, профессия сисадмина уже растворилась в DevOps. Оказывается, нет - она живёт, дышит, и от неё требуют Python для автоматизации Bash-скриптов. Поэтому она и попала в выборку. Это тот самый случай, когда Python - не «специализация», а просто инструмент. Но важное уточнение и достаточно логичное, Системные администраторы в большем своём количестве нужны не в Москве.

Из всего этого следует одна неудобная мысль:

Рынок Python в России - это не рынок профессии. Это рынок ярлыков, и HR-ярлык на твоей вакансии влияет на твою зарплату сильнее, чем твой реальный стек.

Запомни это, когда в следующий раз будешь обновлять резюме. Не «что я умею», а «как меня пометит HR-фильтр» - вот настоящий вопрос. Грустно? Грустно. Но это и есть данные.

Глава 3. Зарплатное молчание: 62% вакансий просто не говорят, сколько платят

Но вот первый шок (хотя для тех кто часто листает hh это наверное и база), ради которого можно было дальше не копать.

Заработная плата в вакансии

Заработная плата в вакансии

Из ~62 000 Python-вакансий зарплату указали только 38%. Остальные - «по результатам собеседования», «достойная», «обсуждается с успешным кандидатом», «зависит от вашей квалификации» (то есть «мы посмотрим, сколько готовы дать именно тебе, чтобы было побольнее»). Реалии рынка: middle который только пришёл может получать в одной компании больше чем senior который работает в этой компании уже 10 лет.

Доля вакансий без указания зарплаты по топ-15 ролям

Доля вакансий без указания зарплаты по топ-15 ролям

Хуже всех молчат - внимание - аналитики и системные аналитики (77–83% без ЗП). Те самые ребята, которые сами по работе должны бороться с пропущенными значениями. Метаирония.

Лучше всех говорят (то есть указывают ЗП чаще) - учителя и педагоги. И, забегая вперёд, лучше бы они молчали.

От куда здесь Фармацевт-провизор? Я не знаю и даже не представлю почему hh разметил и вернул мне это как, что-то, что соответствует тегу python. Так что давайте это воспринимать как шум на примере которого мы можем сравнивать ЗП не с рынком IT. Ну или напишите в комментариях почему я не обработал данные на столько идеально, а я отвечу что мне было лень...

Глава 4. Зарплатная вилка: 80% - это, оказывается, «нормально»

Вот мой любимый график. Просто посмотрите:

Ширина вилки в python

Ширина вилки в python

Учителя - это отдельный жанр на hh. Когда я увидел «80% ширина вилки», я сначала подумал, что это баг в коде. Перепроверил трижды. Нет, не баг. Это просто работодатели сферы образования настолько не знают, сколько готовы платить, что вилка получается шире, чем у кого либо.

Город-чемпион по ширине вилки - Краснодар (60%, n=149). Все, кто едет работать в Краснодар: вас ждёт лотерея. Победителей не предусмотрено. Но попытаться можно))

Москва тут, кстати, выглядит почти прилично - 35% ширина при n=3069. Видимо, столичные HR-ы хотя бы делают вид, что что-то знают про рынок.

И ещё бонусом один график по вилке:

Зарплатная вилка

Зарплатная вилка

Глава 5. География: Сыктывкар, Магадан и другие столицы Python

Самое весёлое случилось, когда я построил карту «роль × город» по медианным зарплатам. И тут понеслось.

Медианная зарплата: Роль × Город

Медианная зарплата: Роль × Город
Распределение зарплат

Распределение зарплат

Топ парадоксов:

  • Тбилиси, Data Scientist: 450 000 ₽ (n=4). Я перепроверил эти 4 вакансии. Реально 450К. То ли релокация в Грузию ещё в тренде, то ли там сидят оставшиеся «эмигранты с инвестициями».

  • Тбилиси, DevOps: 400 000 ₽ (n=3). Та же история.

  • Но с Тбилиси мы не закончили. Семь (7!) вакансий с медианой 50 000 ₽. Какие-то реальные семь работодателей верят в такие цифры, и мало того что верят, получается к ним кто-то ещё и приходит и работает, и платят им как кассиру в Пятёрочке. Точнее по грузински Гудвил (грузинский супер-маркет). Короче разрабы python в Грузии не в цене, другое дело Data Scientist или DevOps.

  • Жуковский: 200К за разработчика. Это уже почти Москва. Логично.

  • Жуковский, учитель: 85К (n=5). В Жуковский python-учителю платят 85к. В Москве - 100к. Логистика, как видите, делает своё дело.

  • Дубна, программист: 175К (n=10). Дубна (физики, ОИЯИ, атомы) - ожидаемо.

И отдельно - Москва: 3069 разработческих вакансий, медиана 190k. То есть половина всего рынка Python в России находится в одном городе. Если кому-то ещё нужны доказательства, что у нас всё централизовано - вот вам централизация в одном heatmap.

Но, не стоит уже складывать чемоданы в Москву и ехать на Курский вокзал, сначала гляньте ка на этот график:

Зарплатный разрыв с Москвой топ-20

Зарплатный разрыв с Москвой топ-20

Здесь я думаю и без моих комментариев всё понятно, но здесь не всё так просто...

Структура IT рынка по городам (Лайк если твой город больше 1% рынка)

Структура IT рынка по городам (Лайк если твой город больше 1% рынка)

Глава 6. Зарплатная динамика во времени: американские горки для DevOps

А теперь садитесь поудобнее. Я взял топ-4 ролей и построил динамику медианной ЗП по месяцам.

Что должно было получиться: плавный рост, лёгкая инфляция, всё предсказуемо.

Что получилось:

Зарплатная динамика топ-4 роли

Зарплатная динамика топ-4 роли
Зарплатная инфляция по ролям в python

Зарплатная инфляция по ролям в python

Внимание на DevOps. В августе 2025 - 230К. В январе 2026 - внезапное падение на -26% (heatmap показывает). К апрелю слегка восстановился, но всё равно в минусе. Самая дорогая инженерная роль в моих данных просела за 8 месяцев.

Я долго думал, что это значит. Версии:

  1. Хайп прошёл, DevOps стало много, ценник падает.

  2. Часть «дорогих» DevOps ушла в найм без публикации (вакансии для своих).

  3. Все DevOps уехали в Тбилиси и теперь работают за 400К оттуда (см. предыдущую главу).

А вот Data Scientist - это аттракцион не для людей со слабым вестибулярным аппаратом. Посмотрите на индекс:

Зарплатная инфляция: Медианная ЗП по ролям помесячно

Зарплатная инфляция: Медианная ЗП по ролям помесячно
Зарплатная инфляция по ролям (индекс, база=первый месяц)

Зарплатная инфляция по ролям (индекс, база = первый месяц)
  • Август 2025: 100%

  • Сентябрь 2025: 83% (-17%, что??)

  • Январь 2026: 164% (+64%)

  • Март 2026: 156%

  • Апрель 2026: 111%

Это не зарплата, это график биткоина. У меня единственное объяснение - маленькая выборка (n=344 за всё время) + редкие, но очень дорогие вакансии типа «ищем сеньора в банк за 500К». Одна такая вакансия в месяце с n=10 - и медиана улетает в космос.

Но если усреднить шум - рост реальный. Дата-сайентисты - единственная «инженерная» роль, которая стабильно растёт в цене. Учителям и тестировщикам это тоже удалось, но из совсем другой стартовой точки.

Короче DS новое золото для IT рынка... Как бы вы на это не смотрели...

Глава 7. Главный твист статьи: Python падает

Я долго смотрел на этот график, прежде чем понял, что я вижу. А вижу я вот что:

Доля упоминаний Python в вакансиях, помеченных как Python:

  • Август 2025: 62.8%

  • Февраль 2026: 54.9%

  • Дельта: -7.9 п.п.

То есть hh-теги - это, мягко говоря, не source of truth. Вакансия может быть помечена тегом Python, но в требованиях Python не упомянут. На графе навыков это видно отлично - Python-вакансии расцветают вокруг SQL, Linux, Docker, а сам Python всё чаще остаётся за кадром, в роли «ну и так понятно, что нужен». С этими курсами Python за 3 дня сам навык теряет свою ценность и вес. Его просто стало сложно оценивать и каждый год по +1000 желающих войти в IT. Обесценивают этот навык заставляя работодателей задрать планку отбора до небес хотя по и тогу после трудоустройства ты сядешь и будешь писать всё тот же python-код изредко прибегая к этим вашим модным kubernetes, clickhouse, redis и тд

А сейчас держитесь крепче, будет нечто страшное и не слыханное ранее:

Растущие и падающие навыки

Растущие и падающие навыки

Да-да и ещё раз да. В Python-вакансиях растёт упоминание MS Excel. В вакансиях, где люди должны программировать на одном из лучших языков обработки данных. Excel. Я даже не знаю, плакать или открывать LibreOffice Calc и тренироваться. Ну конечно здесь можно оговориться, что к примеру для аналитика это важный навык, для преподавателя программирования это так же важный график, да, но сейчас 2026 год...

А ещё растут «софт-скиллы»: аналитическое мышление, работа с информацией. Это значит ровно одно: HR-ы поняли, что «знание Python» - это уже не выделяющий фактор, надо требовать что-то более душевное. Вроде «уметь думать». До такого мы дошли.

Топ-25 ключевых навыков в сфере Python разработки

Топ-25 ключевых навыков в сфере Python разработки

Теперь смотрим на топ навыков по встречаемости, всё очевидно, это просто вам для составления резюме. Берём топ 5, а лучше топ 10 навыков и добавляем в резюмешку, и готово, вы нужны 80% работодателей. Какой я оптимист)) Да?)

А теперь смотрите какой красивый граф я для вас нарисовал))

Граф сочетаемости навыков

Граф сочетаемости навыков

Что здесь можно увидеть? По сути ничего, нового, но теперь становиться понятна связка одного навыка с другими. Здесь мы как будто в магазине и хотим сварить модную крутую кашу и видосика. Набираем крупу (Python), в месте с крупой берём молоко (sql), можно для вкуса взять масло (git), хотя оно как будто по умолчанию у всех уже в холодильнике есть, но типа взяли. Затем для красивой картинки и что бы показать на фотке, что мы не просто кашу едим, покупаем ягод, роскошный максимум или базовый минимум, решайте сами (docker), так же подсластим сахарком тростниковым (kubernetes), ну или раз уж все на фотографиях с кашей улыбаются, берём хорошее настроение (Аналитическое мышление, ms excel, работа с большим объёмом информации).

P.S Про тарелку для каши я уже не говорю, это обязательно (linux).

И ещё бонусом:

Матрица сочетаемости навыков топ-30

Матрица сочетаемости навыков топ-30
Во сколько раз пара встречается чаще случайного

Во сколько раз пара встречается чаще случайного
Связи в парах по количеству

Связи в парах по количеству

Глава 8. Что я понял, пока всё это парсил

Несколько неудобных выводов, которые делают грустно, но полезно (сделали ещё выводы пишите в комментах):

  1. Рынок Python в России - это рынок Москвы по большей части. Всё остальное - статистическая погрешность с n<300.

  2. 62% вакансий без зарплаты - это не «hh виноват», это рынок не хочет торговаться публично. Когда работодатель не пишет вилку - он экономит на тех, кто стесняется спросить.

  3. Теги hh.ru - это шум. Вакансия может быть помечена Python, в требованиях - «уверенный пользователь Excel и работа с большим объёмом информации». Кластеризация навыков (sklearn, KMeans) показывает огромный кластер C1, где Python, SQL и C++ свалены в одну кучу. Это не профессии - это попытка hh пометить хоть что-то.

  4. DevOps больше не «золотая жила», по крайней мере по медианам открытых ЗП. Возможно, рынок дозрел.

  5. Стагнация программистов в 0.0% - это, наверное, самое грустное число во всей статье. За 8 месяцев медианная ЗП Python-разработчика не выросла ни на копейку. При официальной инфляции это означает реальное падение примерно на 6-8%, но дамы и господа это по официальной...)))))

P.S. (как полагается)

  • Вакансий обработано: ~62 800

  • Уникальных городов: 1318 (из них 1300 имели ≤20 вакансий)

  • Самая высокая медиана: Тбилиси, Data Scientist - 450 000 ₽ (n=4, не повторять дома)

  • Самая низкая медиана: Путилково, Программист - 50 000 ₽ (n=7, это тоже не повторять)

  • Объём финального датафрейма: 600 мб в памяти.

  • Веры в открытость рынка труда: утрачено примерно 80%

Если у вас есть собственные наблюдения, замечания, или вы тот самый Data Scientist из Тбилиси за 450k - пишите в комменты, очень хочется понять, как там у вас.

Все прочитавшим до конца спасибо. На самом деле статья выдалась сложной и работа над тем что вы видите, если нужно будет в комментариях ссылочкой на гугл диск со всеми графиками которые получилось сделать. И многие на самом деле не вошли в статью, так как тогда бы эта статья была на час...

Автор: MrSotnik

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js