Information
- Rating
- 3,819-th
- Location
- Тольятти, Самарская обл., Россия
- Date of birth
- Registered
- Activity
Specialization
Системный администратор, DevOps-инженер
Средний
Linux
Docker
Kubernetes
CI/CD
Git
Python
Bash
AWS
Google Cloud Platform
Microsoft Azure
Да, закрыт не только
GET /vacancies. Под 403 ушла вся выдача:api.hh.ru/vacancies?text=...api.hh.ru/vacancies/{id}, одна конкретная вакансияapi.hh.ru/employers/{id}Справочники при этом живы: /areas, /dictionaries, /suggests отдают 200. Подмена User-Agent не спасает:с браузерным тот же 403, с типовым my-app/1.0 (mail@example.com) прилетает 400 Bad User-Agent: blacklisted
Про playwright идея верная, но браузер избыточен. Страница поиска рендерится на сервере и кладёт весь ответ в
<template id="HH-Lux-InitialState">. Обычный curl без кук и без JS получает 200 и 50 вакансий готовым JSONПолей там 59 против 26 в публичной выдаче API. Кроме зарплаты и опыта есть creationTime (когда вакансию завели, а не когда подняли), professionalRoleIds, latestActivity рекрутера и пара счётчиков откликов, responsesCount и totalResponsesCount. Заполнены они у большинства вакансий и на самой странице не отрисованы, но что именно считает каждый, я не разобралась, числа расходятся, и версии с последнего поднятия и по группе вакансий в разных городах обе не подтвердились
Ограничения те же, что были в API 40 страниц по 50, page=40 уже 404, дальше нарезка по регионам и профролям. Описание вакансии требует отдельного запроса на карточку (vacancyView.description). Сосдние страницы слегка пересекаются, дедупликация по vacancyId обязательна на трёх страницах из 150 записей уникальных вышло 144
страница поиска весит 1.6 МБ и отдаётся за 2–4 секунды, против компактного JSON 20 запросов подряд без пауз прошли, один оборвался по reset, капчи не было ни разу
Не критично конечно, но иногда неудобненько)