我可以输入以下网址,通过转发/请求以下端点来获取所有带有#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属性可能是一个线索,我需要去哪个网址才能到达下一页但不确定。有谁知道怎么做?
答案 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_hash
和after
的来源。
首先,让我们看一下在加载更多内容时请求的URL是什么。您只需转到https://instagram.com/explore/tags/ruby,然后向下滚动直到它在检查时加载另一块图像即可。
您将在以下URL上看到一个GET
请求:
正如您在上面的链接中所见,我们需要:
query_hash
after
我真的无法弄清楚first
参数是如何工作的,但是如果您设置更大的值但内容数量不完全相同,它将加载更多的内容。
after
和query_hash
?到目前为止,一切都很好。如果我们知道query_hash
和after
变量,我们可以请求图像的下一页。
借助此链接,您可以轻松地到达标签页的第一个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
。
然后只需使用上面找到的变量将所有内容放在一起,然后浏览到我们的新链接即可获得下一页的JSON文件,就像这样。
答案 2 :(得分:0)
2021 年 4 月更新 - 昨天,Instagram 更改了标签查找的响应。因此,如果您查找特定标签,响应将不再包含“end_cursor”。相反,您应该寻找一个名为“next_max_id”的元素(位于您从 Instagram 获得的响应的最底部)。值类似:例如:QVFBUTVDc2xKMnRKSVZseVdFNk5wR05zRkt4ODhUUWg2dzU2VlVhMUxGZ2xobVc4V01Jby1TM1pRRmFaWUIxRmJkUmdDSjVOc24wNiVDlOc==UlOc24wNiVDlOc==