如何通过 http 请求在 Instagram 中获取关注者和关注列表

Posted

技术标签:

【中文标题】如何通过 http 请求在 Instagram 中获取关注者和关注列表【英文标题】:How to get followers and following list in Instagram via http requests 【发布时间】:2016-06-06 13:26:31 【问题描述】:

我正在寻找一种可能性,通过网络请求(与 Instagram 网站上的方式相同)以 JSON 格式获取关注者和关注列表。 例如,我可以通过请求登录,并获取用户信息:

def get_user_info(self, user_name):
    url = "https://www.instagram.com/" + user_name + "/?__a=1"
    try:
        r = requests.get(url)
    except requests.exceptions.ConnectionError:
        print 'Seems like dns lookup failed..'
        time.sleep(60)
        return None
    if r.status_code != 200:
        print 'User: ' + user_name + ' status code: ' + str(r.status_code)
        print r
        return None
    info = json.loads(r.text)
    return info['user']

我试图查看 chrome 向服务器发送的请求,但未成功。 问题是:如何在没有 Instagram API 的情况下准备类似的 get 或 post 请求来检索关注者列表?

【问题讨论】:

找不到页面。 【参考方案1】:

使用 query_hash = "58712303d941c6855d4e888c5f0cd22f"(以下)和 "37479f2b8209594dde7facb0d904896a"(关注者)的 GraphQL 查询会返回此信息。登录后,使用参数query_hashvariables 对instagram.com/graphql/query 进行GET 查询,其中variables 是一组JSON 格式的变量id(用户ID,如返回get_user_info() 函数的字典),first(页面长度,似乎当前最大值为 50)和在后续请求中将 after 设置为上一个响应字典中的 end_cursor

或者,Instaloader 库提供了一种方便的登录方式,然后以编程方式访问个人资料的关注者和关注者列表。

import instaloader

# Get instance
L = instaloader.Instaloader()

# Login or load session
L.login(USER, PASSWORD)        # (login)
L.interactive_login(USER)      # (ask password on terminal)
L.load_session_from_file(USER) # (load session created w/
                               #  `instaloader -l USERNAME`)

# Obtain profile metadata
profile = instaloader.Profile.from_username(L.context, PROFILE)

# Print list of followees
for followee in profile.get_followees():
    print(followee.username)

# (likewise with profile.get_followers())

除了usernamefull_nameuseridfollowed_by_viewer 等属性在为每个关注者返回的Profile 实例中定义。

【讨论】:

似乎很多类似的工具都在使用GraphQLquery_hash 作为关注者。我正在尝试使用 Java 来处理同样的事情。你觉得适用吗?你有什么代码可以分享吗?非常感谢。 @aandergr 没关系,每 1k 刮掉的追随者我都会被阻止大约 10 分钟,因为:Too many queries in the last time. Need to wait 630 seconds, until ... 我能以某种方式通过吗?【参考方案2】:

简单(只需将 _a 替换为 __a)

'https://www.instagram.com/'+user_name+'/followers/?_a=1'
'https://www.instagram.com/'+user_name+'/following/?_a=1'

【讨论】:

我试过这种方法,但它重定向到用户名主页,但是如何获取关注者列表? 我在公众号上试过。它适用于您的情况吗? 是的,它可以在浏览器中使用,使用 requests.get 或 curl 可以在此处附上浏览器截图供任何公众号使用吗? 肯定禁用。会提示登录。

以上是关于如何通过 http 请求在 Instagram 中获取关注者和关注列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 instagram curl 发布请求转换为 javascript 请求?

Instagram API - 请求 /tags/xxx/media/recent 中缺少值

如何制作Instagram GET请求?

在 instagram api 登录(instagrapi)上无法通过 429 错误(请求太多)

缓存 Instagram API 请求

如何使用他们的 API 显示 Instagram 个人资料图片