Как мне войти в Instagram с помощью BeautifulSoup4 и Requests и как определить это самостоятельно? - PullRequest
0 голосов
/ 10 июля 2020

Я просмотрел эти два сообщения в Stack Overflow: Я не могу войти в Instagram с запросами и Instagram python запрашивает вход без API . Оба решения не работают для меня.

Как мне это сделать сейчас, и как кто-то go узнает, какие запросы и где делать? Чтобы было понятнее, если бы я отправил почтовый запрос для входа в систему, как бы я go узнал, что и куда его отправлять? Я не хочу использовать API Instagram или Selenium, так как хочу попробовать запросы и (возможно) bs4. Если вам нужен код:

import requests

main_url = 'https://www.instagram.com/'
login_url = main_url+'accounts/login/ajax'
user_agent = 'User-Agent: Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25'

session = requests.session()
session.headers = {"user-agent": user_agent}
session.headers.update({'Referer': main_url})

req = session.get(main_url)
session.headers.update({'set-cookie': req.cookies['csrftoken']})
print(req.status_code)

login_data = {"csrfmiddlewaretoken": req.cookies['csrftoken'], "username": "myusername", "password": "mypassword"}


login = session.post(login_url, data=login_data, allow_redirects=True)
print(login.status_code)
session.headers.update({'set-cookie': login.cookies['csrftoken']})

cookies = login.cookies

print(login.headers)
print(login.status_code)

Это дает мне ошибку 405.

1 Ответ

3 голосов
/ 10 июля 2020

вы можете использовать этот код для входа в Instagram

import re
import requests
from bs4 import BeautifulSoup

from datetime import datetime

link = 'https://www.instagram.com/accounts/login/'
login_url = 'https://www.instagram.com/accounts/login/ajax/'

time = int(datetime.now().timestamp())

payload = {
    'username': 'login',
    'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{time}:your_password',
    'queryParams': {},
    'optIntoOneTap': 'false'
}

with requests.Session() as s:
    r = s.get(link)
    csrf = re.findall(r"csrf_token\":\"(.*?)\"", r.text)[0]
    r = s.post(login_url, data=payload, headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "https://www.instagram.com/accounts/login/",
        "x-csrftoken": csrf
    })
    print(r.status_code)

...