我无法弄清楚如何从https://www.rottentomatoes.com/browse/in-theaters/
中删除以下数据电影标题 评分 发布日期 链接到电影细节 链接到电影海报
我没有收到任何数据或进入我的每个循环。
我的代码:
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);
});
答案 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,但我怀疑你能从中获得所需的东西。
另一个选择可能是使用像Selenium或PhantomJS这样的网站自动化库,它运行无头浏览器来实际加载页面并且是可编程的。有关详细信息,请参阅文档的这一部分:http://phantomjs.org/page-automation.html#dom-manipulation
我们不知道您为此做了什么,但请注意,RT terms of use明确禁止检索以创建某种数据库。谢谢@DaveNewton