Pull to refresh
0
Anfisa Kovganyuk@Anfikus

DevOps

0,1
Rating
Send message

Да, закрыт не только 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

STATE = re.compile(r'<template[^>]*id="HH-Lux-InitialState"[^>]*>(.*?)</template>', re.S)
body = urlopen(Request(url, headers={"User-Agent": UA})).read().decode()
data = json.loads(html.unescape(STATE.search(body).group(1)))
vacancies = data["vacancySearchResult"]["vacancies"]

Полей там 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, капчи не было ни разу

В этой версии браузера перестали открываться внешние приложения по ссылкам, например, iTunes не открывается при переходе по ссылке на какой-либо плейлист итп; торрент-качалка не открывается при нажатии на магнит ссылку. В версии 1,13 все работало.
Не критично конечно, но иногда неудобненько)

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