27 июля 2019 г. 22:01

4021

Python requests. Авторизация на сайте

Иногда при парсинге страниц нужно получить данные , которые недоступны незарегистрированным пользователям.Для этого нужно авторизоваться на сайте. И в этой статье я покажу как с помощью замечательной библиотеки requests это реализовать.

В качестве примера попробуем залогиниться на сайте hh.ru.

Как видим нам нужно ввести Email или телефонный номер в качестве логина и пароль и нажать кнопку Входа.

Давайте напишем скрипт на python , который позволяет реализовать эту функциональностью

Для этого скачаем библиотеку requests


pip install requests

Казалось бы , нам нужно просто реализовать метод post этой библиотеки , передав все необходимые данные. Но не так просто , так как нам нужно указать правильный User-Agent и вытащить из кукис файлов значение _xsrf.

User-agent ? И что за значение _xsrf ? Что ты несешь , чувак? Наверно, такие вопросы у вас возникли читая предыдущие строки

Попробую объяснить о чем речь

Попытаемся просто сделать get запрос на сайт hh.ru и посмотреть какой ответ он возвращает

Python авторизация

Как мы видим сервер нам возвращает ответ 404, который говорит , что нет такой страницы. Но если мы выполним запрос через браузер , то все нормально

Такая ошибка происходит из-за того , что сервер думает , что мы робот , так по умолчанию User-Agent отправляемого запроса равен python-requests/2.22.0. Чтобы сервер нам возвращал нормальный ответ , нужно указать правильный user-agent, который эмулирует действия пользователя.


import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}

r = requests.get("https://hh.ru", headers=headers)
print(r)

Теперь разберемся для чего нужен _xsrf . Когда мы логинимся на сайте hh.ru , то мы просто вводим логин и пароль и все. Но при этом при POST запросе на сервер кроме введенных нами значений передается и параметр _xsrf, который нужен для защиты от CSRF-атак. Так вот значение этого параметра сервер hh.ru генерирует автоматически и хранит его в кукис файлах в браузере и чтобы получить это значение , нам нужно использовать объект Session библиотеки requests

Объект Session позволяет сохранять определенные параметры в запросах.Он также сохраняет файлы cookie во всех запросах

Здесь я привожу полный текст скрипта с подробными комментариями, который осуществляет авторизаицю на сайте hh.ru

Заключение

В этой статье реализована практическая задача , которая осуществляет авторизацию на сайте hh.ru. Эта задача прекрасна иллюстрирует то , с чем мы можем столкнуться на практике

comments powered by Disqus