Pull to refresh

Ускоряем процесс поиска работы на HeadHunter

Level of difficultyEasy

Всем привет!

Я начинающий специалист в области анализа данных, хотел бы поделиться своим опытом в поиске работы на сайте HH. Этот сайт является одним из самых популярных и удобных инструментов для поиска работы в России, однако, при поиске подходящей вакансии, я столкнулся с проблемой траты большого количества времени на ручной отклик на интересующие меня вакансии.

Я задумался о том, как можно ускорить этот процесс. Сначала я рассматривал возможность написания парсера на Selenium, который бы автоматически выполнял действия в веб-браузере. Однако, затем я обнаружил, что на сайте HH есть отличный API, который позволяет оставлять отклики на вакансии с возможностью добавления сопроводительного письма.

Для этого нам понадобятся Python, библиотеки requests, json, API HH. Также необходимо быть авторизованным на сайте HH. Лимит на кол-во откликов в день - 200 штук.

С помощью способа описанного ниже я значительно увеличил кол-во просмотров моего резюме, соответственно увеличилось кол-во приглашений и собеседований. И в итоге я получил оффер на желаемую позицию :)

Подключение к API

Для того, чтобы подключиться к API HH:

  1. Необходимо создать приложение (это можно сделать здесь).

  2. После этого станут доступны Client_ID и Client_Secret, которые необходимы для дальнейшей работы.

  3. Перейти по ссылке (используя Client_ID): https://hh.ru/oauth/authorize?response_type=code&client_id={Client_ID}

  4. После перехода по ссылке нас перенаправят на страницу redirect_url, которую мы указали при создании приложения.

  5. Из адреса страницы мы можем взять authorization_code, который необходим для получения access_token.

  6. Используя 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 можно познакомиться здесь.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.