如何从 instagram 标签查找中获取下一页数据

How do I get the next page of data from a instagram tag look up

我可以输入以下 url 以通过 going/requesting 以下端点获取所有带有 #losangeles 标签的 IG 帖子:

https://www.instagram.com/explore/tags/losangeles/?__a=1

在从此 url 返回的 json 数据中,我可以看到 page_info 属性,其中有 has_next_page 属性,该属性设置为 true .我的问题是如何修改上面的 url 以进入下一页,然后是下一页,直到我检查 has_next_page 并且它是错误的。

尝试起来似乎很直观

https://www.instagram.com/explore/tags/losangeles/?__a=2

https://www.instagram.com/explore/tags/losangeles/?__b=1

但似乎都不起作用。我怀疑从原始 url 返回的数据中的 end_cursor 属性可能是关于 url 我需要去哪里才能进入下一页的线索,但我不确定。有人知道怎么做吗?

这是可能的。每个响应都包含一个 end_cursor 参数。在您的下一个请求中,使用 end_cursor 的值添加一个 max_id 参数,如下所示:https://www.instagram.com/explore/tags/losangeles/?__a=1&max_id=<value>

我这里有一个用 react/axios 编写的工作示例:https://codepen.io/ghostreef/pen/ZrKrXX。我的示例来自用户帐户,因此我的响应 xml 不同。标签的 end_cursor 位于 data.graphql.hashtag.edge_hashtag_to_media.page_info.end_cursor,图像数据位于 data.graphql.hashtag.edge_hashtag_to_media.edges,您必须遍历节点。

好吧,我刚刚阅读 this article 并在标签页上应用了相同的过程,您绝对可以在您想要的任何其他页面上执行此操作。

您可以检查浏览器上的每个请求(以及 JavaScript)以查找 query_hashafter 参数的来源。

当我们加载更多内容时,请求的 URL 是什么?

首先,让我们看一下当我们加载更多内容时,请求的是什么URL。您可以通过转到 https://instagram.com/explore/tags/ruby 然后向下滚动直到它在检查时加载另一块图像来简单地执行此操作。

您将在下面看到 GET 请求 URL:

https://www.instagram.com/graphql/query/?query_hash=1780c1b186e2c37de9f7da95ce41bb67&variables={"tag_name":"ruby","first":12,"after":"AQAFSpwCDXVgp2pnTXf57MavtlZnwU4ptNnC6nRGtIs5C9erOWwzZkcfSiq812RlMqDLzKlCzsAx-b9sIsIm4X4REE1LbZeA5yok7yA2jGcJqg"}

我们需要知道什么才能获得下一页?

正如您在上面看到的 link 我们需要:

  1. query_hash
  2. after

我无法真正弄清楚 first 参数是如何工作的,但如果您输入更大的值但内容数量不完全相同,它会加载更多内容。

我们从哪里获得变量 afterquery_hash

到目前为止一切顺利。如果我们知道 query_hashafter 变量,我们就可以请求下一页图像。

借助这个 link:

,您可以很容易地找到标签页的第一个 JSON 文件

https://www.instagram.com/explore/tags/yourtagname/?__a=1

我使用了 ruby 标签,所以我的标签是:

https://www.instagram.com/explore/tags/ruby/?__a=1

加载 JSON 文件后,您可以看到有一个名为 end_cursor 的变量。这是我们的 after 参数。


要获取 query_hash 参数,您需要查看 .js 文件

https://www.instagram.com/static/bundles/base/TagPageContainer.js/f1172b0dfea6.js

然后您只需要搜索字符串 byTagName.get(t).pagination},queryId:" 后跟您需要的 query_hash

然后使用我们在上面找到的变量将所有部分放在一起并浏览到我们的新 link 以获取下一页的 JSON 文件。

https://www.instagram.com/graphql/query/?query_hash=1780c1b186e2c37de9f7da95ce41bb67&variables={"tag_name":"ruby","first":9,"after":"AQDPE3V-ycMcCFjHv8Gq7MnR-x2hxNOI6WQGO8psxHsRWJo3pIDpR-qaKUITQGE3-dvEYYdG4ueWzSPLabVH7VOBZq4oWZYvsjswh2w622HwEQ"}

2021 年 4 月更新 - 昨天,Instagram 更改了带有标签查找的响应。因此,如果您查找特定标签,响应将不再包含“end_cursor”。相反,您应该寻找一个名为“next_max_id”的元素(位于您从 Instagram 获得的响应的最底部)。值类似:eg:QVFBUTVDc2xKMnRKSVZseVdFNk5wR05zRkt4ODhUUWg2dzU2VlVhMUxGZ2xobVc4V01Jby1TM1pRRmFaWUIxRmJkUmdDSjVOc24wVDlOc0NiQTB2Z3U3Vg==