66 votes

Racler des pages web en temps réel avec Node.js

Quel est le meilleur moyen de récupérer le contenu d'un site Web en utilisant Node.js ? J'aimerais construire quelque chose de très, très rapide qui puisse exécuter des recherches dans le style de kayak.com où une requête est envoyée à plusieurs sites différents, les résultats sont extraits et renvoyés au client dès qu'ils sont disponibles.

Partons du principe que ce script doit simplement fournir les résultats au format JSON, et que nous pouvons les traiter soit directement dans le navigateur, soit dans une autre application web.

Quelques points de départ :

Utiliser node.js et jquery pour gratter des sites web

Quelqu'un a une idée ?

0 votes

J'ai l'impression que votre deuxième lien répond à votre propre question.

0 votes

@sirhc - node.io ressemble à ceci exactement ce que je cherche... merci !

19 votes

En tant qu'auteur de node.io, je peux en témoigner ;)

24voto

Avishai Points 1350

Node.io semble prendre le dessus :-)

15 votes

En tant qu'auteur, je peux me porter garant de node.io ;)

3 votes

Node.io n'est plus maintenu. Il est mort, le nom de domaine original a été vendu. Cette réponse n'est pas d'actualité.

20voto

DTrejo Points 928

Jetez un coup d'œil à http://blog.dtrejo.com/post/43757473805/scraping-made-easy-with-jquery-and-selectorga Vous y trouverez également des outils pratiques en ligne qui vous aideront à créer des expressions régulières et à trouver les meilleurs sélecteurs avec selectorgadget.

Voici un lien vers le code pour vous aider à démarrer : https://gist.github.com/790580

En ce qui concerne l'alimentation de la page avec les résultats en temps réel, je recommande socket.io .

N'oubliez pas que vous pouvez toujours vous arrêter à #node.js et posez des questions !

UPDATE : Je choisirais maintenant http://npm.im/cheerio y http://npm.im/request . http://selectorgadget.com/ est toujours SUPER utile, tout comme http://txt2re.com

5voto

Yevgeniy Points 653

Toutes les solutions susmentionnées supposent l'exécution locale du scraper. Cela signifie que vous serez sévèrement limité dans les performances (en raison de leur exécution en séquence ou dans un ensemble limité de threads). Une meilleure approche, à mon avis, consiste à s'appuyer sur une grille de grattage existante, bien que commerciale.

Voici un exemple :

var bobik = new Bobik("YOUR_AUTH_TOKEN");
bobik.scrape({
  urls: ['amazon.com', 'zynga.com', 'http://finance.google.com/', 'http://shopping.yahoo.com'],
  queries:  ["//th", "//img/@src", "return document.title", "return $('script').length", "#logo", ".logo"]
}, function (scraped_data) {
  if (!scraped_data) {
    console.log("Data is unavailable");
    return;
  }
  var scraped_urls = Object.keys(scraped_data);
  for (var url in scraped_urls)
    console.log("Results from " + url + ": " + scraped_data[scraped_urls[url]]);
});

Dans ce cas, l'extraction est effectuée à distance et un rappel est envoyé à votre code uniquement lorsque les résultats sont prêts (il existe également une option permettant de collecter les résultats dès qu'ils sont disponibles).

Vous pouvez télécharger Bobik client proxy SDK en https://github.com/emirkin/bobik_javascript_sdk

2voto

electblake Points 624

J'ai fait des recherches moi-même, et https://npmjs.org/package/wscraper se targue d'être un

un agent de grattage du web basé sur cheerio.js un agent rapide, flexible et léger du noyau de jQuery ; construit au-dessus de request.js ; inspiré de http-agent.js

Très peu utilisé (selon npmjs.org) mais vaut le coup d'œil pour toute personne intéressée.

1voto

daithi44 Points 36

Vous n'avez pas toujours besoin de jQuery. Si vous jouez avec le DOM renvoyé par jsdom par exemple, vous pouvez facilement prendre ce dont vous avez besoin vous-même (en considérant également que vous n'avez pas à vous soucier des problèmes de xbrowser.) Voir : https://gist.github.com/1335009 cela n'enlève rien à node.io, je dis juste que vous pourriez être capable de le faire vous-même selon...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X