WEIRD "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"

WEIRD "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"

问题: 当我尝试使用下面的第一个代码时,我得到了 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)。所有这些代码昨天都运行良好,昨天也停止工作了。今天它也不起作用。奇怪的是,我刚刚启动了第二个代码(也在下面),它工作了一次,然后在另一次启动后又遇到了同样的问题!

行抛出错误:

post_info = instagram_web_api.media_info2("<SHORTCODE>")

求助:(。俄罗斯堆栈溢出没有答案。

我用instagram-private-api 1.6.0.0

1-st 代码 当我得到那个错误时:

from instagram_web_api import Client

instagram_web_api = Client(auto_patch=False, drop_incompat_keys=False)

post_info = instagram_web_api.media_info2('CVNgb7us34V') # Get the short code.
post_text = post_info['edge_media_to_caption']['edges'][0]['node']['text']

print(post_text)

二次码:

from instagram_web_api import Client

web_api = Client(auto_patch=False, drop_incompat_keys=False)
user_feed_info = web_api.user_feed('329452045', count=10)

问题出在您使用的库和 instagram 之间:后者没有将您 JSON 发送到您期望的位置。

如果您查看 the sourcemedia_info2,它看起来像这样:

def media_info2(self, short_code):
    """
    Alternative method to get media info. This method works for carousel media.

    :param short_code: A media's shortcode
    :param kwargs:
    :return:
    """
    headers = {
        'User-Agent': self.user_agent,
        'Accept': '*/*',
        'Accept-Language': 'en-US',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'close',
        'Referer': 'https://www.instagram.com',
        'x-requested-with': 'XMLHttpRequest',
    }
    info = self._make_request(
        'https://www.instagram.com/p/{0!s}/'.format(short_code),
        query={'__a': '1', '__b': '1'},
        headers=headers)
    ...

根据您的回溯,错误在 make_request 中。所以我们去看看 the source ,我们看到重要的几行是:

self.logger.debug('REQ DATA: {0!s}'.format(data))
res = self.opener.open(req, data=data, timeout=self.timeout)
...

if return_response:
    return res
response_content = self._read_response(res)
    self.logger.debug('RES BODY: {0!s}'.format(response_content))
    return json.loads(response_content)

我们现在拥有了进行一些手动调试所需的一切,因为程序是这样工作的:

  • 设置headers并将它们和url传递给make_request
  • 从url
  • 获取数据
  • 将日期解析为 json
  • return数据

我们 可以 将我们自己的调用放在一起 opener,甚至 运行 curl 在 url 通过到 _make_request,或临时修改代码以打印一些内容并更加冗长。但在这种情况下,我们有一个更简单的选择:代码将 已经 为我们调试自身,我们只需要告诉它是冗长的:

import logging
logging.basic_config(level=logging.DEBUG)

将它放在失败脚本的顶部并再次 运行 它应该会喷出大量数据,告诉您它到底在做什么。由于它打印了 整个 return body,你应该得到它的任何内容 returning,并且能够弄清楚发生了什么。

记住....使用来源,卢克。

好吧,那太糟糕了,但了解代码正在做什么的唯一方法是阅读源代码。 python 的伟大之处在于它的可读性。将此与试图通过阅读找出一些 C++ 库进行比较...

问题是因为 Instagram 有时不允许很多请求,所以在我多次请求后,它阻止了我从 post 获取任何信息的权限。解决办法是在API登录。就这些了。