Как сделать авторизацию на сайт при парсинге через requests?
На коленке состряпал, вроде работает:
import requests

url = "https://login.dnevnik.ru/login/esia/karelia"
#url на свой регион заменишь, там когда на сайте авторизуешься он отображается

login = 'логин'
password = 'пароль'
session = requests.Session()
get_cookies = session.get(url)
captcha_id = get_cookies.cookies['dnevnik_sst'].split('|')[0]
print(captcha_id)

data = {
	'exceededAttempts': False,
	'login': login,
	'password': password,
	'Captcha.Id': captcha_id
}

response = session.post(url, data)
Для всех операций используешь объект session, в нём будут сохранятся куки, и потом можно обращаться к страницам, как будто ты авторизованный, например так:
my_class_html = session.get('https://schools.dnevnik.ru/class.aspx')

schedule_html = session.get('https://schools.dnevnik.ru/homework.aspx')
Как правило, любой сайт при авторизации устанавливает в браузер куки. Браузер при каждом запросе сообщает эти куки на сайт, благодаря чему тот "понимает" какой пользователь совершил запрос. Соответственно тебе нужно передавать эти куки при каждом запросе так же как браузер. Вряд ли в Дневнике используется что-то хитрее.

Начать можно с того, что залогиниться на сайте и собрать все куки для домена сайта. В Хроме это делается так: F12 — Application — Storage — Cookies. Захадрдкодь найденные куки:
cookies = {
    '_ym_isad': '...',
    '_gid': '...',
    '_ym_uid': '...',
    '_ga': '...',
    '_ym_d': '...',
    '_gat': '...',
    '_gat_main': '...',
}
r = requests.get(url, cookies=cookies)
Если это сработает, тогда думай сценарием авторизации из своего скрипта.