Нет данных, возвращаемых из соскоб гнилых томатов - PullRequest
0 голосов
/ 06 мая 2018

Я не могу понять, как очистить следующие данные от https://www.rottentomatoes.com/browse/in-theaters/

Название фильма Оценка по отзывам Дата выхода Ссылка на детали фильма Ссылка на постер фильма

Я не получаю никаких данных и не захожу в каждый цикл.

Скриншот Rotten Tomatoes

Мой код:

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 голосов
/ 06 мая 2018

Данные, которые вы хотите, недоступны в RAW HTML страницы, и это все, что может видеть cheerio. Вы можете увидеть это сами, если просто загрузите URL в браузер, а затем выполните View / Source и посмотрите на необработанный HTML.

Если вы посмотрите на этот HTML, вы увидите пустой раздел:

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

Данные, которые вы ищете, по-видимому, добавляются на страницу через Javascript, который Cheerio не сможет увидеть. Чтобы увидеть данные на странице, которая добавлена ​​с помощью Javascript, вам нужно будет использовать движок браузера без головы, такой как PhantomJS. Или вы можете найти в сети сервис, который предлагает API для непосредственного получения нужных вам данных.

Кроме того, ваш селектор должен был быть $('.mb-movie'), но данных там нет, поэтому он не будет работать без запуска Javascript на странице, чтобы вы могли получить доступ к динамически добавляемым данным на странице.

0 голосов
/ 06 мая 2018

Во-первых, ваш селектор неверен, потому что в нем отсутствует префикс точки для имен классов, т. Е. $ (". Mb-movie").

Но даже если вы исправите селектор, он все равно ничего не будет совпадать, потому что фильмы динамически отображаются на странице с помощью JS после загрузки страницы. Вы можете проверить это, выполнив «просмотр источника» на странице в браузере и выполнив поиск селектора mb-movie - вы его не найдете. Элементы mb-movie динамически добавляются с помощью media-browser.js , который выполняется как часть страницы. Запрос не является веб-браузером, он может загружать только необработанный HTML.

RT раньше имел API, который, кажется, больше не доступен. Есть один из фанданго , но я сомневаюсь, что вы получите от него то, что вам нужно.

Еще одним вариантом может быть использование библиотеки автоматизации веб-сайта, такой как Selenium или PhantomJS , которая запускает браузер без монитора для фактической загрузки страницы и является программируемой. Смотрите эту часть документации для получения дополнительной информации: http://phantomjs.org/page-automation.html#dom-manipulation

Мы не знаем, для чего вы это делаете, но обратите внимание, что условия использования RT явно запрещают извлечение с целью создания какой-либо базы данных. Спасибо @ DaveNewton

0 голосов
/ 06 мая 2018

После небольшого исследования я обнаружил, что гнилые помидоры фактически загружают список фильмов поверх API отдыха:

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

это должно обеспечить данные, которые вам нужны, без необходимости проходить через безголовый браузер или что-либо еще!

...