Парсинг hh.ru ошибка требует капчу
Считываю с hh.ru страницы с вакансиями в json. Далее перехожу по ссылкам в каждую вакансию и считываю полные данные по каждой вакансии, сохраняю в json. После примерно 3000 вакансий начинает считываться ошибка
{"errors":[{"value":"captcha_required","captcha_url":"https://hh.ru/account/captcha?state=pxvcxBozfu7ry7R4QCetFpeicJ2Ml%2Bur%2F701s7jX2mZxCzHziryEFFjVgnI%2BvznkWxaVSgPj67XokFr31BOU8EFhIWldkAUTAsvw7%2FdzN4pT%2Fd%2Boae6SsDZ%2FD1amd0j5","type":"captcha_required"}],"request_id":"16527760531513bc87dd9347f901b5af"}
По ссылке captcha_url при открывании в браузере тоже ошибка. Ответ от службы поддержки: "После ссылки на капчу подставить backurl, который вернёт обратно в приложение." Куда подставлять backurl и что в нем должно быть? Ссылка на вакансию, на которой началась ошибка капчи?
Есть ли какой-то способ открыть страницу с капчей для прохождения вручную? Использую метод requests.get
import json
import os
import time
import requests
start_time = time.time()
k=0
# Получаем перечень ранее созданных файлов со списком вакансий и проходимся по нему в
цикле
for fl in os.listdir('.\pages'):
# Открываем файл, читаем его содержимое, закрываем файл
f = open('.\\pages\\{}'.format(fl), encoding='utf8')
jsonText = f.read()
f.close()
# Преобразуем полученный текст в объект справочника
jsonObj = json.loads(jsonText)
# Получаем и проходимся по непосредственно списку вакансий
for v in jsonObj['items']:
# Обращаемся к API и получаем детальную информацию по конкретной вакансии
req = requests.get(v['url'])
data = req.content.decode()
req.close()
# Создаем файл в формате json с идентификатором вакансии в качестве названия
# Записываем в него ответ запроса и закрываем файл
fileName = '.\\vacancies\\{}.json'.format(v['id'])
f = open(fileName, mode='w', encoding='utf8')
f.write(data)
k+=1
f.close()
print('Вакансии собраны')
print("--- %s seconds ---" % (time.time() - start_time))
Ответы (1 шт):
Ловите ошибку связанную с капчей и переходите на страницу с капчей + &backurl=<ваш сайт>. На JS это выглядит так:
catch (error) {
document.location.href = error.response.data.errors[0].captcha_url + '&backurl=' + 'http://127.0.0.1:5500/index.html';
}
Вместо http://127.0.0.1:5500/index.html, прописываете то что нужно вам