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 как обычно.