使用Java(在Eclipse上)通过HTTP XML Request刮取网站(javascript呈现)

时间:2018-02-08 21:54:00

标签: javascript java html ajax web-scraping

我正在尝试用Java抓取一个网站,从表中提取一些百分比,即this one

在处理HTML源代码后呈现这些百分比。所以我们可以知道这些元素是通过Javascript渲染的,这使得刮得更难(操作,问题)

所以这是渲染之前元素之间的区别:

<div class="user_forecasts" id="57464" />

在渲染之后:

<div class="user_forecasts" id="57464"> <b>1</b>
  <div class="percents">61% | 25% | 14%</div>
</div>

显然,我想获得&#34; 61%| 25%| 14%&#34;字符串,以及表格中的其余百分比...

嗯,事实上,是的,它是由 Javascript 呈现的,我找到了.js文件,幸运的是我找到了有趣的部分:

// ajax user_forecast load - one call
if ($('div.user_forecasts').length > 0) {
  $.ajax({
    url: '/vote/percentage',
    global: false,
    type: 'GET',
    data: {
      a: $('#jornadaq').val()
    },
    success: function(percentages) {
      perc_obj = eval(percentages);
      $('div.user_forecasts').each(function(ind, val) {
        if (ind == 14) {
          $(this).html("<b>" + perc_obj[ind].value + "</b><div class='percents'>" + perc_obj[ind].porcent + "%" + "</div>");
        } else {
          $(this).html("<b>" + perc_obj[ind].forecast + "</b><div class='percents'>" + perc_obj[ind].local + "% | " + perc_obj[ind].tie + "% | " + perc_obj[ind].visitor + "%" + "</div>");
        }
      });
    }
  });
}

如您所见,它是一个AJAX调用。我检查了是否可以通过将此代码粘贴到Chrome开发人员虚拟机中来获得百分比,是的,我得到了我想要的内容:包含我的程序所需数据的元素组。

请查看this ScreenShot (Chrome Developer Virtual Machine)

问题是我不知道如何告诉Java编写此XML Http请求然后获取此数据。您为此推荐了哪些库,以及如何在这种情况下特别使用它们?

1 个答案:

答案 0 :(得分:0)

从java中,您可以调用GET URL“/ vote / percentage”,就像获取任何其他HTML页面一样,并解析返回的JSON结果。有很多方法可以做到这一点 - 看起来你已经在做这个(获取一个用于抓取的URL的HTML页面),所以你可以使用相同的方法来获取这个URL。

调用此GET URL以获取JSON,并调用URL获取HTML的唯一区别是返回的数据格式。前者返回JSON,后者是HTML。