刮掉rottentomatoes

时间:2018-05-05 23:14:58

标签: node.js request cheerio

我无法弄清楚如何从https://www.rottentomatoes.com/browse/in-theaters/

中删除以下数据

电影标题 评分 发布日期 链接到电影细节 链接到电影海报

我没有收到任何数据或进入我的每个循环。

Rotten Tomatoes screenshot

我的代码:

var cheerio = require("cheerio");
var request = require("request");

// Make a request call to grab the HTML body from the site of your 
choice
request("https://www.rottentomatoes.com/browse/in-theaters/", 
function(error, response, html) {

  // Load the HTML into cheerio and save it to a variable
 // '$' becomes a shorthand for cheerio's selector commands, much like 
 jQuery's '$'
 var $ = cheerio.load(html);

 // An empty array to save the data that we'll scrape
 var results = [];

 // Select each element in the HTML body from which you want 
 information.
  // NOTE: Cheerio selectors function similarly to jQuery's selectors,
  // but be sure to visit the package's npm page to see how it works
  $('mb-movie').each(function(i, element) {
    console.log("inside each");
    console.log($(element));
    var link = $(element).children().attr("href");
var title = $(element).find('h3').text();


// // Save these results in an object that we'll push into the results array we defined earlier
results.push({
  title: title,
  link: link
});

  });

 // Log the results once you've looped through each of the elements 
 found with cheerio
  console.log(results);
 });

3 个答案:

答案 0 :(得分:1)

经过一番调查后,我发现rottentomatoes实际上将电影列表加载到其余的api上:

https://www.rottentomatoes.com/api/private/v2.0/search/default-list

这应该提供您需要的数据,而无需通过无头浏览器或任何东西!

答案 1 :(得分:0)

您所需的数据在页面的RAW HTML中不可用,这是cheerio可以看到的全部内容。如果您只是将URL加载到浏览器中,然后执行View / Source并查看原始HTML,您可以自己看到。

如果您查看该HTML,您会看到一个空白部分:

<section class="mb-movies" style="opacity:1">
</section>

您正在寻找的数据显然是通过Javascript添加到页面中的,这是cheerio无法看到的内容。要查看通过Javascript添加的页面中的数据,您必须使用无头浏览器引擎,例如PhantomJS。或者,您可以在Web上找到提供API的服务,以便更直接地检索您想要的数据。

此外,您的选择器应该是$('.mb-movie'),但数据并不存在,因此无需在页面中运行Javascript即可使用,以便您可以访问动态添加的内容页面中的数据。

答案 2 :(得分:0)

首先,您的选择器不正确,因为它缺少类名的点前缀,即$(&#34; .mb-movie&#34;)。

但即使您更正了选择器,它仍然无法匹配任何内容,因为在页面加载后使用JS在页面上动态呈现电影。您可以通过执行&#34;查看源代码来测试此信息。在浏览器页面上搜索选择器mb-movie - 您将找不到任何内容。 mb-movie元素由media-browser.js动态添加,作为页面的一部分执行。请求不是Web浏览器,它只能下载原始HTML。

RT以前有一个似乎不再可用的API。有一个来自fandango,但我怀疑你能从中获得所需的东西。

另一个选择可能是使用像SeleniumPhantomJS这样的网站自动化库,它运行无头浏览器来实际加载页面并且是可编程的。有关详细信息,请参阅文档的这一部分:http://phantomjs.org/page-automation.html#dom-manipulation

我们不知道您为此做了什么,但请注意,RT terms of use明确禁止检索以创建某种数据库。谢谢@DaveNewton