web-dev-qa-db-fra.com

Comment analyser plus efficacement une page Web à l'aide de Node.js

Je dois analyser une page Web simple et obtenir des données HTML, telles que "src", "data-attr", etc. Comment puis-je faire cela plus efficacement en utilisant Node.js? Si cela peut aider, j'utilise Node.js 0.8.x.

P.S. Ceci est le site je suis en train de parser. Je veux obtenir une liste des pistes actuelles et créer ma propre application html5 pour écouter sur les appareils mobiles.

25
NiLL

J'ai beaucoup fait ça. Vous voudrez utiliser PhantomJS si le site Web que vous grattez utilise beaucoup JavaScript. Notez que PhantomJS n'est pas Node.js. C'est un runtime JavaScript complètement différent. Vous pouvez intégrer via phantomjs-node ou node-phantom , mais ils sont un peu hacky. YMMV avec ceux-ci. Évitez tout ce qui a trait à jsdom. Cela vous causera des maux de tête - ceci inclut Zombie.js .

Ce que vous devez utiliser est Cheerio en conjonction avec Request . Cela sera suffisant pour la plupart des pages Web. 

J'ai écrit un article de blog sur l'utilisation de Cheerio avec Request: Nettoyage rapide et simplifié des écrans avec Node.js Mais encore une fois, si vous utilisez beaucoup JavaScript, utilisez PhantomJS en conjonction avec CasperJS

J'espère que cela t'aides.

Extrait utilisant Request et 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'));
  });
});
58
JP Richardson

Vous pouvez essayer PhantomJS . Voici la documentation pour l'utiliser pour le grattage d'écran.

4
jabclab

Je suis d’accord avec @JP Richardson pour dire que Cheerio est préférable pour gratter les sites non lourds en JS . Pour les sites lourds en JS, utilisez Casper . Il fournit d'excellentes abstractions sur Phantom et une API de style promesses. Ils examinent comment gratter dans leurs documents: http://docs.casperjs.org/en/latest/quickstart.html

3
Max Heiber

Si vous voulez utiliser fantôme, utilisez node-phantom. J'ai un référentiel git hub qui les utilise ensemble pour générer des fichiers PDF à partir de HTML si vous voulez jeter un coup d'œil . Mais je ne choisirais pas Fantôme, car il fait plus que ce que vous voulez habituellement et cheerio est plus rapide.

0
MurWade