Chrome показывает другой HTML, чем мое приложение RequestJS & CheerioJS

Мое приложение-скребок выполняет поиск URL-адреса Vimeo с прикрепленной к нему строкой запроса, которая

'http://vimeo.com/search?q=angularjs'

Когда я загружаю этот URL в Chrome, я вижу несколько элементов, которые не отображаются с request() этот URL из моего скребка. HTML-код, который я могу загрузить как с Chrome, так и с моим скребком, - это то, что кажется статичными элементами, такими как HTML-код в навигационной панели и нижнем колонтитуле. Когда я пытаюсь получить доступ к любым элементам, которые будут сгенерированы Vimeo при обработке строки запроса search?q=angularjsмой скребок не получает доступ к сетке видеогалереи, которая отображается в Chrome. Итак, вот мой скребок:

var request = require('request'),
  cheerio = require('cheerio'),
  searchURL = 'http://vimeo.com/search?q=angularjs';

request(searchURL, function(err, resp, body){
  if(err)
    throw err;
  $ = cheerio.load(body);
  console.log($('#site_header .join a').text());
  console.log($('#page_header h1').text());
  $('#browse_content .browse_videos li a').each(function(){
    console.log(this.attr('href'));
  });
});

После загрузки тела в $ с Cheerio я бегу

console.log($('#site_header .join a').text());

какие журналы Join на консоль. Это работает. Отлично. Но если я сделаю

console.log($('#page_header h1').text());

то, что я вошел в консоль Please Try Again что я предполагаю, означает, что запрос не может быть выполнен. И когда я вижу этот фрагмент HTML на странице исходного кода в Chrome, я вижу:

<header id="page_header">
    <h1>Search videos for <mark class="txt_normal">angularjs</mark></h1>
</header>

И просто чтобы быть уверенным, что я побежал

console.log($('html').html());

который плюнул мне обратно на HTML-страницу, где отсутствует browse_content div, который содержит сетку галереи миниатюр видео. Вот почему следующий код ничего не возвращает:

$('#browse_content .browse_videos li a').each(function(){
  console.log(this.attr('href'));
});

Так почему же Vimeo не хочет, чтобы мой скребок запрашивал контент?

1 ответ

Не вдаваясь в подробности вашего примера, я подозреваю, что вам понадобится что-то вроде http://phantomjs.org/ для анализа javascript на сайте Vimeo. Phantom.js вернет объект, к которому вы можете применять методы cheerio как обычно.

Другие вопросы по тегам