Java:提取Instagram喜欢?

时间:2015-01-10 21:32:36

标签: java html web-scraping extract instagram

所以这是一个非常直截了当的问题,我只是想知道,有没有人知道我将如何做到这一点,最好使用纯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上所说“[用户x],[用户y],[用户z]和[其他人的数量]喜欢这个”,然后你可以从字符串中提取它并得到以下行:

<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)变量吗?或者,如果有人有更好的解决方案,我将非常感激:)

干杯!

1 个答案:

答案 0 :(得分:1)

你走的很复杂。

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

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

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


编辑:添加了更多有关检索&#34;喜欢&#34;

的身份验证需求的信息

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

  

您需要进行身份验证吗?

     

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

TL; DR你不必在公共媒体上对访问喜欢的内容进行身份验证... 它在网站上没有很好的记录...... 我刚刚在console进行了测试,看看我得到了什么。

On&#34; users / self / media / likes&#34;我有: "error_message": "Missing access_token URL parameter."

但是&#34; media / {mediaid} /喜欢&#34;我懂了: "error_message": "Missing client_id or access_token URL parameter."

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