我不能为 instagram API 做 json()['graphql']['user']

Posted

技术标签:

【中文标题】我不能为 instagram API 做 json()[\'graphql\'][\'user\']【英文标题】:I can't do json()['graphql']['user'] for instagram API我不能为 instagram API 做 json()['graphql']['user'] 【发布时间】:2022-01-10 09:43:38 【问题描述】:

我正在尝试制作一个工具,可以从 Instagram 个人资料页面中获取 JSON 格式的所有信息。

例如:https://www.instagram.com/dave_saa/?__a=1

每当我尝试这样做时,都会出现错误。错误是:simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0).

更详细的错误

Traceback (most recent call last):
  File "C:\Users\disco\PycharmProjects\IgOSINT\main.py", line 9, in <module>
    json_found_for_site = request_for_site.json()
  File "C:\Users\disco\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\models.py", line 910, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Users\disco\AppData\Local\Programs\Python\Python39\lib\site-packages\simplejson\__init__.py", line 525, in loads
    return _default_decoder.decode(s)
  File "C:\Users\disco\AppData\Local\Programs\Python\Python39\lib\site-packages\simplejson\decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)
  File "C:\Users\disco\AppData\Local\Programs\Python\Python39\lib\site-packages\simplejson\decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我的 Python 代码

import requests
from termcolor import colored
import json
import simplejson

target = str(input(colored('[+] Enter Target Username: ', 'blue')))

request_for_site = requests.get('https://www.instagram.com/' + target + '/?__a=1')
json_found_for_site = request_for_site.json()['graphql']['user']

if (request_for_site.status_code == 200):
    print(colored('[+++] TARGET FOUND !', 'green'))
    print(colored(
        '''
        [1] USERNAME
        [2] FULL NAME
        [3] BIO
        [4] HIGHLIGHTS
        [5] PHONE NUMBER
        [6] IS ACCOUNT PRIVATE OR PUBLIC [recommended FIRST]
        [7] Profile Picture
        [8] Followers
        [9] Followed
        [10] ID
        [11] IS VERIFIED
        ''', 'red'
    ))
    tool_option = str(input(colored('[+] ENTER NUMBER OPTION TO FIND: ', 'blue')))
    if (tool_option == '1'):
        print(json_found_for_site['username'])
    elif (tool_option == '2'):
        print(json_found_for_site['full_name'])



该程序仍在开发中,尚未完成。但我得到了错误,所以我暂时停止并在这里寻求帮助。

请有人帮忙。

【问题讨论】:

解码前检查响应码! 响应码是 200 仅表示 HTTP 服务器理解您使用的 URL,但并不意味着它发送 JSON 数据。或者它可能会发送带有不同于您期望的数据的 JSON - 即。它可以发送错误消息。您应该首先显示request_for_site.json() 或更好的request_for_site.text,看看您真正得到了什么。错误可能表明它没有得到 JSON 而是空字符串。 顺便说一句:某些服务器可能会检查您在请求中使用的标头 - 尤其是 User-Agent - 但 requests 发送一些想法,例如 python/3.8 而不是 Mozilla/5.0... 所以服务器可能会检测到它是脚本/ bot 并发送不同的值,然后你期望 - 即。它可能会发送带有验证码的 html 以确认您是人类。 当我运行您的代码并检查 print( request_for_site.text ) 时,我会看到标题为 LOGIN 的 HTML。如果我在private mode 中的浏览器中测试您的链接,那么它也会重定向到带有登录表单的页面。所以你的代码必须先登录到服务器。 【参考方案1】:

您正在解析的文档是 HTML,而不是 JSON。您无法使用 JSON 解析器解析 HTML,要解析 HTML,您需要 HTML 解析器。

【讨论】:

问题不同。如果您未登录,那么您将获得带有登录表单的 HTML,但如果您已登录,则会获得预期的 JSON 数据。 如何解析 HTML?转换成 JSON @RDMotivationKrunklier:我不明白你的意思。 “将 HTML 解析为 JSON”是什么意思? 我如何使用 python 获取请求登录呢?然后获取 JSON。你能显示代码吗?谢谢。

以上是关于我不能为 instagram API 做 json()['graphql']['user']的主要内容,如果未能解决你的问题,请参考以下文章

Instagram API 文档无效的 JSON 错误

将没有 api 的 Instagram 主题标签 json 放入谷歌表格的问题

使用 Json.net 的 Instagram API

新手开始在 Java 中使用 Instagram API

新的 Instagram API,如何按标签获取帖子

Instagram API 按标签搜索,空白返回