如何提取Instagram数据

Bry*_*rds 5 web-scraping instagram

我正在尝试构建一个Instagram帐户的Microsoft Access数据库,并希望提取以下数据,其中包括:

  • 用户名
  • 粉丝数量
  • 接下来的人数
  • 帖子数量(及其日期)
  • 喜欢图片的数量
  • 图片评论数量

我在构建数据库时没有任何问题,但想知道是否有更简单/更快的方式来获取所有信息,而无需查看每个单独的图片/帐户并选择信息.

Microsoft Access是最好的方法吗?有更好的解决方案吗?

Nee*_*ngh 9

好吧,如果这个问题有'web-Scraping'关键字,那么请允许我在这里分享一些信息..

Instagram在其html源代码中包含JavaScript JSON数据,同时通过链接显示用户的信息,例如 https://www.instagram.com/user-account/.您可以使用任何脚本语言解析这些数据,并可以获取JSON数据.

Instagram在单一请求中只显示10个帖子,您可以看到用户的基本信息,如用户名,传记,没有帖子,没有关注者和关注者.但是,如果我们需要所有喜欢和评论以及所有图片或喜欢和评论每张照片的帖子.然后我们必须点击他们的' Load more'按钮.

加载更多请求Ajax Call包括' ?max_id ',它为您提供接下来的10个帖子信息.所以你必须创建一个Post循环来发送/获取休息信息,直到'max_id'为空或为空.

示例请求:第一页, https://www.instagram.com/demo-user/

下一个数据请求: https://www.instagram.com/demo-user/?max_id=1533276522

等等...

最近我有一些空闲时间,我在Instagram上生气;)所以只是制作了一个脚本来解决所有这些问题.这适用于PHP和代码都有很好的评论,所以我认为这不会导致任何问题,以了解应用程序流.您可以看到脚本,它是如何工作的,并且可以使用任何其他语言的逻辑.

这来自这个GitHub存储库代码

&..是的,它不需要Instagram API或者.. :)


Gor*_*don 6

为什么不直接使用url直接查看json数据:

https://www.instagram.com/ /?__ a = 1


小智 2

您绝对应该查看 Instagram 的 API,它可以为您提供您想要抓取的所有公共信息。您只需要编写一个脚本来进行正确的 API 调用(如下所示)。

来自 Instagram 的网站:

我们尽力让所有 URL 都是 RESTful。每个端点 (URL) 都可以支持四种不同的 http 动词之一。GET 请求获取有关对象的信息,POST 请求创建对象,PUT 请求更新对象,最后 DELETE 请求将删除对象。

当您在代码中使用 URL 时,您只需要准备好相关帐户的ACCESS-TOKEN值,并且能够解压 Instagram 通过每个 GET 请求返回给您的 json。如果数据无法直接获得,您始终可以间接将其恢复。- 帐户名称 - 关注者数量 - 关注人数

这是一个很好的起点: https: //www.instagram.com/developer/endpoints/users/#get_users

以下是在 python 中调用 API 的方法:

#Python 2.7.6
#RestfulClient.py

import requests
from requests.auth import HTTPDigestAuth
import json

# Replace with the correct URL
url = "http://api_url"

# It is a good practice not to hardcode the credentials. So ask the user to enter credentials at runtime
myResponse = requests.get(url,auth=HTTPDigestAuth(raw_input("username: "), raw_input("Password: ")), verify=True)
#print (myResponse.status_code)

# For successful API call, response code will be 200 (OK)
if(myResponse.ok):

    # Loading the response data into a dict variable
    # json.loads takes in only binary or string variables so using content to fetch binary content
    # Loads (Load String) takes a Json file and converts into python data structure (dict or list, depending on JSON)
    jData = json.loads(myResponse.content)

    print("The response contains {0} properties".format(len(jData)))
    print("\n")
    for key in jData:
        print key + " : " + jData[key]
else:
  # If response code is not ok (200), print the resulting http error code with description
    myResponse.raise_for_status()
Run Code Online (Sandbox Code Playgroud)

  • 据我了解,API 要求用户允许您访问他们的(已经公开的)信息。是这样吗? (3认同)