Как наиболее эффективно анализировать веб-страницу с помощью Node.js

Мне нужно проанализировать простую веб-страницу и получить данные из html, такие как "src", "data-attr" и т.д. Как я могу сделать это наиболее эффективно с помощью Node.js? Если это помогает, я использую Node.js 0.8.x.

PS Это сайт, который я разбираю. Я хочу получить список текущих треков и создать собственное приложение html5 для прослушивания на мобильных устройствах.

Ответ 1

Я сделал это много. Вы хотите использовать PhantomJS, если веб-сайт, который вы очищаете, сильно использует JavaScript. Обратите внимание, что PhantomJS не Node.js. Это совершенно другое время выполнения JavaScript. Вы можете интегрировать через phantomjs-node или node-phantom, но они оба являются просто хаки. YMMV с этими. Избегайте каких-либо действий с jsdom. Это вызовет у вас головные боли - сюда входит Zombie.js.

То, что вы должны использовать, - это Cheerio в сочетании с Request. Этого будет достаточно для большинства веб-страниц.

Я написал сообщение в блоге об использовании Cheerio с запросом: быстрый и грязный скрипинг экрана с помощью Node.js. Но опять же, если он интенсивный JavaScript, используйте PhantomJS совместно с CasperJS.

Надеюсь это поможет.

Фрагмент с использованием запроса и Cheerio:

var request = require('request')
  , cheerio = require('cheerio');

var searchTerm = 'screen+scraping';
var url = 'http://www.bing.com/search?q=' + searchTerm;

request(url, function(err, resp, body){
  $ = cheerio.load(body);
  links = $('.sb_tlst h3 a'); //use your CSS selector here
  $(links).each(function(i, link){
    console.log($(link).text() + ':\n  ' + $(link).attr('href'));
  });
});

Ответ 2

Вы можете попробовать PhantomJS. Вот документация для его использования для скрипинга экрана.

Ответ 3

Я согласен с @JP Ричардсоном, что Cheerio лучше всего подходит для соскабливания сайтов, не связанных с JS. Для JS-тяжелых сайтов используйте Casper. Он обеспечивает отличные абстракции над Phantom и API API с обещаниями. Они перебирают, как очистить свои документы: http://docs.casperjs.org/en/latest/quickstart.html.

Ответ 4

Если вы хотите пойти на фантом, используйте узел-фантом. У меня есть репозиторий git-хаба, который использует их вместе для генерации PDF файлов из html, если вы хотите посмотреть. Но я бы не пошел на фантом, потому что он делает больше, чем вы обычно хотите, а cheerio быстрее.