我正在使用请求模块登录Instagram并在登录后检索用户信息



编辑:代码现在可以工作了,问题与非ASCII字符'\xe2'有关, 通过声明解决:

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

我向PEP-263寻求帮助。


我使用以下代码的请求登录 instagram:

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关注者和帖子的数量。我有这个代码,它提供了特定用户的信息。

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}')

但我想要的是显示记录的用户信息而不是特定帐户。我该怎么做?

您可以在登录时简单地访问自己的页面。

此修改应该可以解决问题:

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

最新更新