如何从instagram标记中查找下一页数据

时间:2018-01-29 06:38:16

标签: python python-requests instagram instagram-api

我可以输入以下网址,通过转发/请求以下端点来获取所有带有#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

但似乎都不起作用。我怀疑从原始网址返回的数据中的end_cursor属性可能是一个线索,我需要去哪个网址才能到达下一页但不确定。有谁知道怎么做?

3 个答案:

答案 0 :(得分:2)

这是可能的。每个响应都包含end_cursor参数。在您的下一个请求中,使用max_id的值添加end_cursor参数,如下所示: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,您必须遍历节点。

答案 1 :(得分:1)

好吧,我刚刚读过this article,并在标签页上应用了相同的步骤,您当然可以在任何其他想要的页面上进行此操作。

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

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

首先,让我们看一下在加载更多内容时请求的URL是什么。您只需转到https://instagram.com/explore/tags/ruby,然后向下滚动直到它在检查时加载另一块图像即可。

您将在以下URL上看到一个GET请求:

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

要获取下一页,我们需要知道什么?

正如您在上面的链接中所见,我们需要:

  1. query_hash
  2. after

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

我们在哪里获得变量afterquery_hash

到目前为止,一切都很好。如果我们知道query_hashafter变量,我们可以请求图像的下一页。

借助此链接,您可以轻松地到达标签页的第一个JSON文件:

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

我使用了ruby标签,因此我的标签是:

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

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

end_cursor variable preview


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

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

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

然后只需使用上面找到的变量将所有内容放在一起,然后浏览到我们的新链接即可获得下一页的JSON文件,就像这样。

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

答案 2 :(得分:0)

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