【问题标题】:How do I get the next page of data from a instagram tag look up如何从 instagram 标签查找中获取下一页数据
【发布时间】:2018-01-29 06:38:16
【问题描述】:

我可以输入以下网址,通过前往/请求以下端点来获取所有带有#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 才能进入下一页但不确定的线索。有人知道怎么做吗?

【问题讨论】:

    标签: python python-requests instagram instagram-api


    【解决方案1】:

    这是可能的。每个响应都包含一个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,您必须遍历节点。

    【讨论】:

    • 太好了,谢谢!我使用电话instagram.com/<accountname>/?__a=1&max_id=<value>,似乎只是缺少一些消息。当您使用此选项时。第一次和第二次通话之间有两条消息的间隙。
    • 不再像你提到的那样工作。现在还有其他方法吗?
    • 刚刚找到方法!
    • @AndréYuhai 你能在这里分享你的解决方案吗?
    • @killernova 我在下面的回答中已经解释过了。没看过的请看一下。
    【解决方案2】:

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

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

    加载更多内容时请求的 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 参数。


    要获取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"}

    【讨论】:

    • 如果有人需要配置文件数据,可以在 ProfilePageContainer 文件中找到 query_hash,即instagram.com/static/bundles/es6/ProfilePageContainer.js/…
    • 谁能帮助我如何以编程方式访问这个 queryId 值。每次发送新的配置文件请求时都解析整个 JS 文件不是一个好主意。
    【解决方案3】:

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

    【讨论】:

    • 有什么方法可以设置要检索的项目数吗?例如,我尝试了 &count=100,但没有成功。
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-09-17
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多