我可以输入以下url来获取所有带有#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属性可能是一个线索,我需要去哪个网址才能到达下一页但不确定。有谁知道如何做到这一点?
这个有可能。每个响应都包含一个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
,您必须遍历节点。
好吧,我刚刚阅读了this article并在标签页面上应用了相同的程序,你绝对可以在你想要的任何其他页面上执行此操作。
您可以在浏览器上检查每个请求(以及JavaScripts),以查找query_hash
和after
parameters的来源。
首先,让我们看看加载更多内容时请求的URL是什么。您可以通过转到https://instagram.com/explore/tags/ruby然后向下滚动直到它在检查时加载另一块图像来执行此操作。
您将看到以下网址的GET
请求:
正如您在上面我们需要的链接中看到的那样:
query_hash
after
我无法弄清楚first
参数是如何工作的,但是如果你输入更大的值而不是完全相同的内容数量,它会加载更多的内容。
after
and 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文件。