【问题标题】:Java: Extracting Instagram likes?Java:提取 Instagram 赞?
【发布时间】:2015-01-10 21:32:36
【问题描述】:

所以这是一个非常简单的问题,我只是想知道,有没有人知道我将如何做到这一点,最好使用纯 java/至少可以从 Java 程序执行的代码?

目前我正在使用以下方法从服务器下载网页:

        URL url = new URL(u);
        URLConnection uc = url.openConnection();
        uc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
        InputStream inputStream = uc.getInputStream();

        FileOutputStream outputStream = new FileOutputStream("currentImagePage.html");

        int bytesRead = -1;
        int BUFFER_SIZE = 4096;

        byte[] buffer = new byte[BUFFER_SIZE];
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }

        outputStream.close();
        inputStream.close();

返回的 HTML 文档可以在这里看到: http://pastebin.com/262h22PQ

如果您查看第 110 行,那是我能看到的唯一真正有趣的东西:

  <script type="text/javascript">
  window._strings = {
  //other random crap
  "%(count)s people liked this photo": "%(count)s people liked this photo",

但是无论如何我可以访问 count 变量吗?如果有的话,我会很感激任何能指出我正确轨道的人


我实际上有一个有效的方法,但是它涉及使用 selenium 的 webdriver 加载网页,然后调用 .getPageSource() 方法。这将返回以下页面源:

http://pastebin.com/ZZtNiWPw

正如 Instagram 所说的“[user x]、[user y]、[user z] & [number of others] like this”,您可以从字符串中提取它并获得以下行:

<span data-reactid=".0.0.1.0.0.0.0.0.0.1.0.0.0:1.$tx7:0" class="llRemainingCount">3,511</span>

这种方法存在一个问题...必须加载可能成千上万的图像页面才能提取喜欢的数量非常慢。


所以我想我真正要问的是 1)我能否获得第一个方法来返回与方法 2 或 2 相同的页面源)无论如何我可以访问方法 1 中的 %(count) 变量吗?或者如果有人有更好的解决方案,我将不胜感激:)

干杯!

【问题讨论】:

    标签: java html web-scraping extract instagram


    【解决方案1】:

    你走的路很复杂。

    大多数大型网站都为您提供了可以从 Java 调用的非常好的 API。 一些甚至是专用于这些 API 的交付库

    Instagram API:http://instagram.com/developer/

    Instagram 不提供 Java 库。但是 Java 确实为 RESTful Web 服务提供了一个名为 JAX-RS 的 API。我不是这方面的专家,但通过谷歌搜索你可能会发现更多


    编辑:添加了有关检索“喜欢”的身份验证需要的更多信息

    摘自http://instagram.com/developer/authentication/

    您需要进行身份验证吗?

    在大多数情况下,Instagram 的 API 只需要使用 client_id。 client_id 只是将您的服务器、脚本或程序与特定应用程序相关联。但是,有些请求需要身份验证 - 特别是代表用户提出的请求。

    TL;DR 不,您无需进行身份验证即可访问公共媒体上的赞... 它在网站上没有很好的记录...... 我刚刚在console 进行了测试,看看我得到了什么。

    在“用户/自我/媒体/喜欢”我得到: "error_message": "Missing access_token URL parameter."

    但是在“media/{mediaid}/likes”上我得到了这个: "error_message": "Missing client_id or access_token URL parameter."

    一些阅读和摆弄总能解决问题:P

    【讨论】:

    • 我确实查看了 API,但根据我的理解,我感觉您必须登录才能执行很多操作。也许我错了,但如果你必须登录,那只是大多数用户不想做的不必要的麻烦......
    • 不知道如果我编辑我的帖子它是否会通知你,但我需要格式化^^
    • @SteveM 您无需登录即可访问任何公开的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多