Всем привет!
Я начинающий специалист в области анализа данных, хотел бы поделиться своим опытом в поиске работы на сайте HH. Этот сайт является одним из самых популярных и удобных инструментов для поиска работы в России, однако, при поиске подходящей вакансии, я столкнулся с проблемой траты большого количества времени на ручной отклик на интересующие меня вакансии.
Я задумался о том, как можно ускорить этот процесс. Сначала я рассматривал возможность написания парсера на Selenium, который бы автоматически выполнял действия в веб-браузере. Однако, затем я обнаружил, что на сайте HH есть отличный API, который позволяет оставлять отклики на вакансии с возможностью добавления сопроводительного письма.
Для этого нам понадобятся Python, библиотеки requests, json, API HH. Также необходимо быть авторизованным на сайте HH. Лимит на кол-во откликов в день - 200 штук.
С помощью способа описанного ниже я значительно увеличил кол-во просмотров моего резюме, соответственно увеличилось кол-во приглашений и собеседований. И в итоге я получил оффер на желаемую позицию :)
Подключение к API
Для того, чтобы подключиться к API HH:
Необходимо создать приложение (это можно сделать здесь).
После этого станут доступны Client_ID и Client_Secret, которые необходимы для дальнейшей работы.
Перейти по ссылке (используя Client_ID): https://hh.ru/oauth/authorize?response_type=code&client_id={Client_ID}
После перехода по ссылке нас перенаправят на страницу redirect_url, которую мы указали при создании приложения.
Из адреса страницы мы можем взять authorization_code, который необходим для получения access_token.
Используя Client_ID, Client_Secret и authorization_code мы можем отправить post запрос и получить необходимый токен.
params = {
'grant_type':'authorization_code',
'client_id':Client_ID,
'client_secret':Client_Secret,
'code':authorization_code}
access_token = json.loads(requests.post(f'https://hh.ru/oauth/token', params=params)\
.content.decode())['access_token']
Оставляем отклики
Создадим список компаний, в которые мы хотим направить свой отклик
company_lst = ['Комания_1', 'Компания_2', 'Компания_3']
Следующая часть кода выполняется в цикле, где мы проходим по каждой компании из списка
for company in company_lst
Затем, используя язык поисковых запросов HH, мы сформируем запрос, указав, какие слова должны присутствовать в вакансии и в каких ее частях. Для поиска в конкретном поле мы применим двоеточие после его названия. Подробнее о языке поисковых запросов здесь. Сформируем поисковый запрос:
# здесь также можно указать желаемый стек
search_row = f'NAME:("data analyst" OR "аналитик данных" \
OR "data аналитик"OR "продуктовый аналитик" \
OR "Специалист по работе с данными" NOT "стажёр") \
AND COMPANY_NAME:{company}'
Для всех последующих методов API будем использовать в качестве заголовков HTTP, здесь нам и понадобится access_token:
headers = {
'Authorization': f'Bearer {access_token}',
'HH-User-Agent': 'Название вашего приложжения (Почта приложения)'
}
Проходя по каждой компании из списка company_lst в цикле, мы будем использовать поисковый запрос для метода "Поиск по вакансиям" (https://api.hh.ru/vacancies), передавая в него соответствующие параметры. В ответ на наш get-запрос мы получим json с данными по найденным вакансиям, нам нужны будут только их id.
params = {
'text':search_row, # поисковый запрос
'area':1, # регион поиска - Москва
'period':30, # период в днях, за который появились вакансии
'per_page': 100 # количество вакансий на странице
}
vacancy_url = 'https://api.hh.ru/vacancies'
vacancies = json.loads(
requests.get(vacancy_url, headers = headers, params=params).content.decode())
vacancies_ids = [x['id'] for x in vacancies['items']]
Далее напишем шаблон сопроводительного письма, где будем менять название компании в зависимости от того, куда отправляем отклик.
message = f'Шаблон сопроводительного письма для компании {company}'
Чтобы отправить отклик, необходимо узнать id своего резюме, с которым мы хотим его отправить. Для этого воспользуемся методом https://api.hh.ru/resumes/mine. Способ ниже вернет список всех резюме, необходимо будет найти id нужного резюме.
resume_list = json.loads(
requests.get('https://api.hh.ru/resumes/mine', headers = headers).content.decode()
)['items']
И наконец, если список id вакансий непустой, мы пройдемся по нему циклом, отправляя наш отклик с сопроводительным письмом по каждой подходящей вакансии текущей компании.
if len(vacancies_ids) > 0:
for id in vacancies_ids:
params = {
'vacancy_id':id, # id вакансии
'resume_id':'ID резюме',
"message":message # текст сопроводительного документа
}
click_url = 'https://api.hh.ru/negotiations'
requests.post(click_url, headers = headers, params=params)
После отправки запроса, отклик появится в личном кабинете HH.
P.S. Для отклика на вакансии можно использовать и другие методы, например, не используя список компаний, а просто находя нужные вакансии с помощью поискового запроса, можно добавлять множество фильтров, в том числе размер заработной платы, регион и т.д. Более подробно с возможностями API можно познакомиться здесь.