Как залогиниться на сайте при помощи python requests?

День добрый
Есть задача спарсить сайт https://www.strava.com, для парсинга используем Python.
Парсить надо внутренние пользовательские данные сайта. Для этого надо залогинеца, а с этим проблема. Что бы мы не пробовали пока результат отрицательный. Нужна помощь специалиста в этом вопросе.
Заранее спасибо

from bs4 import BeautifulSoup
import requests
from fake_useragent import UserAgent
from time import sleep


def authorize():

    headers = {
        'User-Agent': UserAgent().chrome,

    }
    # utf8: ✓
    # 'utf8': '✓',
    login_data = {
        'utf8': '✓',
        'plan': '',
        'email': 'mail@ru',
        'password': 'pass',
    }

    with requests.Session() as s:
        s.get('https://www.strava.com')
        s.verify = False

        url = 'https://www.strava.com/login/'
        r = s.get(url)

        soup = BeautifulSoup(r.text, 'html5lib')
        login_data['authenticity_token'] = str(soup.find('input', attrs={'name': 'authenticity_token', 'type': "hidden"})['value'])

        headers['X-CSRF-Token'] = soup.select_one('meta[name="csrf-token"]')['content']
        headers['cookie'] = '; '.join([x.name + '=' + x.value for x in s.cookies])

        sleep(1)

        r2 = s.post(url, data=login_data, headers=headers)


    r3 = s.get('https://www.strava.com/clubs/225082/members')

    sleep(1)

    print(r3.text)




def main():
    authorize()



if __name__ == '__main__':
    main()
  • Вопрос задан
  • 4066 просмотров
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Да тут делов на 2минуты:
import requests
from bs4 import BeautifulSoup
import time
headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0'}

data = {'authenticity_token':'',
		'email':'', # Email
		'password':''  # Пароль
		}

url = 'https://www.strava.com/session'

session = requests.Session() # Сессия

def get_token():# Метод, для получения токена
	response = session.post(url,headers=headers)
	soup = BeautifulSoup(response.text,"html.parser")
	token = soup.find('input',{'name':'authenticity_token'}).get('value')
	return token # Возвращает токен


def auth(): # Метод, для авторизации
	response = session.post(url,headers=headers,data=data)
	return response.text

data['authenticity_token'] = get_token() # Вызывает метод для получения токена, и результат заносим в словарь

time.sleep(2) # Пауза 2 сек :)
html = auth() # Авторизируемся. В html будет наш ответ после авторизации

if 'Log Out' in html: # Если строка 'Log Out' есть в html, значит авторизация прошла успешно
	print('Login OK!')
else:
	print('Login Error!')

Если что не понятно, пишите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nazartropanets
@nazartropanets
изучаю deep learning и ML(Python)
Попробуйте промониторить через Network вход в аккаунт(нажимаете f12 и выбираете Network), логинитесь и отсылаете форму. Во вкладке Network должны были отослатся данные входа на сервер, посмотрите что передается, вероятнее всего вместе с паролем и именем передается какой-то токен, и из-за этого не получается выполнить авторизацию. Для авторизации нужно передавать все данные которые должны передаватся, а не только юзернейм и пароль.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы