Я использую модуль Запросы, чтобы войти в Instagram и получить информацию о пользователе после входа в - PullRequest
1 голос
/ 07 февраля 2020

РЕДАКТИРОВАТЬ: код работает сейчас, проблема была связана с не-ASCII символом '\ xe2', решаемым путем объявления:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

Я обратился за помощью PEP-263 .


Я вхожу в инстаграм, используя запросы с использованием этого кода:

import bs4
from bs4 import BeautifulSoup
import json
import re
import requests

BASE_URL = 'https://www.instagram.com/accounts/login/'
LOGIN_URL = BASE_URL + 'ajax/'

headers_list = "Mozilla/5.0 (Windows NT 5.1; rv:41.0) Gecko/20100101"
" Firefox/41.0"


USERNAME = 'myUser'
PASSWD = 'myPassword'
USER_AGENT = headers_list

session = requests.Session()
session.headers = {'user-agent': USER_AGENT}
session.headers.update({'Referer': BASE_URL})
req = session.get(BASE_URL)
soup = BeautifulSoup(req.content, 'html.parser')
body = soup.find('body')

pattern = re.compile('window._sharedData')
script = body.find("script", text=pattern)

script = script.get_text().replace('window._sharedData = ', '')[:-1]
data = json.loads(script)

csrf = data['config'].get('csrf_token')
login_data = {'username': USERNAME, 'password': PASSWD}
session.headers.update({'X-CSRFToken': csrf})
login = session.post(LOGIN_URL, data=login_data, allow_redirects=True)
print(login.content)

# b'{"authenticated": true, "user": true, "userId": "*******", "oneTapPrompt": false, "status": "ok"}'

Однако, как только я вошел в систему, я хочу извлечь информацию о пользователе, например, n number подписчиков и постов. У меня есть этот код, который дает информацию определенного c пользователя.

html = requests.get('https://www.instagram.com/USER')
soup = BeautifulSoup(html.text, 'lxml')
item = soup.select_one("meta[property='og:description']")
name = item.find_previous_sibling().get("content").split("•")[0]
followers = item.get("content").split(",")[0]
following = item.get("content").split(",")[1].strip()
print(f'{name}\n{followers}\n{following}')

Но я хочу, чтобы отображалась информация о зарегистрированном пользователе, а не указанная c учетная запись. Как бы я go об этом?

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете просто зайти на свою страницу при входе в систему.

Эта модификация должна помочь:

html = requests.get('https://www.instagram.com/'+USERNAME)
...