如何使用Python下载Instagram数据

Instagram是世界上最大的社交媒体网络之一,截至2021年,约有12.1亿用户,占互联网总用户的28%,according to Statista

本文是关于如何使用Python以两种方法编程下载Instagram中的数据的指南。第一种方法是使用Instaloader下载媒体。第二种方法是编写一个简单的Python脚本来获取有关用户资料的JSON数据。

需要注意的是,抓取数据可能违反Instagram的服务条款,我们建议您只从自己的账户下载数据。

使用Instaloader

Instaloader是一个用于下载Instagram媒体的Python包。它非常易于使用,可以快速方便地提取和下载数据。要开始使用Instaloader,首先使用pip安装它:

pip install instaloader

安装完成后,您可以使用它的命令行界面或作为Python脚本中的一个包来使用。

要从命令行使用它,您可以使用instaloader命令。例如,要显示帮助信息,请在终端中输入以下命令:

instaloader --help

要下载用户的个人资料图片,您可以使用带有--profile标签的命令,后面跟着用户名。像这样:

instaloader --profile 

但是,要使此命令生效,您需要先登录。为此,您将传递登录选项,如下所示:

instaloader --login  --profile 

要下载的内容

使用Instaloader,您可以下载不同的媒体。这个手册页面的摘录展示了您可以下载的所有不同内容:

  profile               下载个人资料。如果已经下载的个人资料已被重命名,Instaloader会自动通过唯一ID找到它并相应地重命名文件夹。
  @profile              下载关注者的所有个人资料。需要--login。考虑使用:feed而不是@yourself。
  "#hashtag"            下载#hashtag。
  %location_id          下载%location_id。需要--login。
  :feed                 下载您的动态图片。需要--login。
  :stories              下载您关注者的动态。需要--login。
  :saved                下载您标记为已保存的帖子。需要--login。
  -- -shortcode         下载给定shortcode的帖子
  filename.json[.xz]    重新下载给定的对象。
  +args.txt             从给定的文本文件中读取目标(和选项)。

要下载特定用户的帖子,您将输入以下命令:

instaloader --login  

在这种情况下,您的用户名是您经过身份验证的Instagram账户的用户名;目标用户名是您要下载帖子的个人资料的用户名。

要下载关注者的帖子,您将输入以下命令:

instaloader --login  @

请注意,这个命令与前一个命令的区别在于目标用户名之前有一个@

使用Instaloader命令行界面的另一种选择是将其作为Python包使用。这个包有很好的文档 here

使用Instaloader,您可以下载不同的媒体文件。然而,如果您想提取元数据,比如用户的个人资料页面,仅使用Instaloader是不够的。通过下一种方法,您将编写一个Python脚本来提取用户资料的数据。

编写一个Python脚本来下载Instagram数据

概览

在这个方法中,我们将使用Python编写一个简单的脚本来下载Instagram数据。这种方法依赖于使用一个相对不知名的Instagram JSON API来从公共配置文件中提取数据。

这个API的工作方式是,如果你在配置文件URL的末尾添加查询__a=1&__d=1,Instagram会响应带有有关配置文件的JSON数据。

例如,我的用户名是0xanesu。因此,如果我向https://instagram.com/instagram/?__a=1&__d=1发出请求,我将得到关于我的配置文件的JSON数据作为响应。

编写脚本

为了在Python中发出请求,我们将使用Python的requests模块。然而,您也可以使用urllib或任何其他您喜欢的客户端库来发出HTTP请求。首先,使用pip安装requests模块。

pip install requests

安装完成后,打开一个文件来编写您的脚本,并从requests模块中导入get函数。此外,还从json导入loads函数。这将用于解析JSON响应。

from requests import get
from json import loads

导入数据后,创建一个变量来存储您的Instagram配置文件的URL。

url = 'https://instagram.com/'

如前所述,为了从配置文件中提取Instagram数据,您需要添加__a=1__d=1查询参数。为了定义这些参数,我们创建了一个带有参数的字典对象。

params = { '__a': 1, '__d': 1 }

为了授权我们发出的请求,Instagram需要一个会话ID。稍后,我将向您展示如何获取会话ID。现在,只需放入一个占位符值,稍后再替换。

cookies = { 'sessionid': '' }

接下来,定义一个在请求成功时运行的函数。

def on_success(response):
    profile_data_json = response.text
    parsed_data = loads(profile_data_json)
    
    print('用户全名:', parsed_data['graphql']['user']['full_name'])
    print('用户简介:', parsed_data['graphql']['user']['biography'])

我定义的函数将接收响应对象,提取响应体中的JSON,然后将JSON解析成一个对象。在此之后,我只提取配置文件的全名和简介。

接下来,定义发生错误时运行的函数。

def on_error(response):
    # 如果出现错误,则打印错误信息
    print('出现错误')
    print('错误代码:', response.status_code)
    print('原因:', response.reason)

然后我们调用get函数发出请求,将URL、params和cookies作为参数传递。

response = get(url, params, cookies=cookies)

最后,我们检查错误的状态码。如果状态码为200,我们调用on_success函数。否则,我们只调用on_error函数。

if response.status_code == 200:
    on_success(response)
else:
    on_error(response)

此时,我们已经完成了代码的编写。剩下的是获取sessionid。要获取会话ID,请打开您的Google Chrome并在Web上打开Instagram。确保您已登录,然后使用Ctrl + Shift + ICmd +Shift + I打开Dev工具。

使用开发工具打开,打开“应用”选项卡。

然后点击Cookies子菜单,查看Instagram使用的Cookies。

然后从Dev Tools面板中列出的Cookies列表中复制sessionid cookie的值。

复制会话ID后,将其粘贴到脚本中并执行脚本。在我的情况下,以用户名Instagram(https://instgram.com/instagram?__a=1&__d=1)使用,这是输出结果。

就是这样,我们可以动态下载配置文件数据。从JSON API返回的数据还有很多。当您打印所有数据时,这是输出结果:

这就是从Instagram配置文件中提取数据和帖子的方法。

最后的话

在本文中,我们介绍了如何使用Instaloader下载帖子和媒体。然后编写了一个自定义脚本来提取包含更多内容的配置文件JSON数据。如果您喜欢这个项目,您可能会想查看我们关于Python Timeit to Time Your Code的文章。

如果您对提高Instagram体验有兴趣,请查看我们关于Qoob Stories的文章:Instagram下载器的详细评测。

类似文章