Авторизация на сайте через питон
По материалам статьи: Python requests. Авторизация на сайте
Я описал как парсить сайты через модуль requests. Бывают случаи когда для части сайта нужна авторизация, то есть логин и пароль.
Для авторизации нужно поддерживать активную сессию в модуле requests, через session.get()
import requests
import re
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://freelance.ru/login/'
# Важно. По умолчанию requests отправляет вот такой
# заголовок 'User-Agent': 'python-requests/2.22.0 , а это приводит к тому , что Nginx
# отправляет 404 ответ. Поэтому нам нужно сообщить серверу, что запрос идет от браузера
user_agent_val = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
# Создаем сессию и указываем ему наш user-agent
session = requests.Session()
r = session.get(url, headers = {
'User-Agent': user_agent_val
})
# Указываем referer. Иногда , если не указать , то приводит к ошибкам.
session.headers.update({'Referer':url})В оригинальной статье было снимание куков, я не совсем понимаю когда использовать. В данном скрипе, я это не использую.
_xsrf = session.cookies.get('_xsrf', domain=".freelance.ru")Дальше посылаем post-запрос
login = "xxxx"
passwd = "xxxx"
post_request = session.post(url, {
'login': login ,
'passwd': passwd,
"check_ip": "on",
"submit": "%C2%F5%EE%E4",
"auth": "auth",
"return_url": "/login/"
})Для того чтобы узнать пост запрос, нужно зайти в инспектор кода, вкладка сеть, и найти запрос который посылается
Теперь переходим в закрытый раздел, обновляем сессию и снимаем данные
url = "https://freelance.ru/setup/"
r = session.get(url)
soup = BeautifulSoup(r.text, "lxml")
soup
Дальше можно снимать нужную информацию, используя BeautifulSoup
Для библиотеки Requests, есть хорошие статьи от Александра, pythonru
Краткое руководство по библиотеке Python Requests — рассказывает кратко, как пользоваться библиотекой.
Продвинутое руководство по библиотеке Python Requests — дополнительная информация, по объектам session, сертификатам SSL, прокси.