2010-12-03 21 views
2

Je recherche un langage pour écrire un robot d'indexation Web efficace. Ce que je valorisons:Recommandations de langage pour un robot d'indexation Web efficace

  • langage expressif (ne me faites pas seulement à travers des cerceaux de typage statique)
  • bibliothèques utiles (un analyseur HTML basé sélecteur CSS serait bien)
  • empreinte mémoire minimale
  • fiable langue d'exécution & bibliothèques

J'ai essayé node.js. J'aime le nœud en théorie. Javascript est très expressif. Vous pouvez utiliser jQuery pour analyser html. La nature asynchrone de Node me permet d'explorer de nombreuses URL en parallèle sans traiter de threads. V8 est agréable et rapide pour l'analyse.

En pratique, le noeud ne fonctionne pas pour moi. Mon processus se bloque constamment. Erreurs de bus, exceptions dans le gestionnaire d'événements ... etc

J'ai fait pas mal de dev de Ruby, donc ça ne me dérangerait pas d'utiliser les coroutines de Ruby 1.9 (fibres?) Tant que je gagnerais ' t face à des problèmes similaires avec VM/stabilité de la bibliothèque.

Des suggestions supplémentaires?

Répondre

0

Je suis sûr que n'importe quel langage a quelque chose de construit qui peut le gérer. Etes-vous sûr que node.js ne plante pas à cause d'un problème dans votre code? Pourquoi ne pas utiliser Ruby si vous êtes à l'aise avec ça?

Il y a aussi BeautifulSoup (Python), ce que vous pourriez considérer si vous êtes le principal obstacle de l'analyse HTML.

+0

Je suis sûr que les plantages ne sont pas causés par des problèmes dans mon code. Il est plus probable que mon code expose des problèmes dans le nœud. Surtout dans le cas de l'erreur de bus. J'aime Ruby, je n'ai aucune expérience dans l'écriture de code asynchrone dans Ruby, donc je ne sais pas si c'est aussi "facile" que dans un nœud. – richcollins

6

Utilisez Node.js et corrigez tout ce qui se bloque. Il fonctionne sur ma boîte Ubuntu sans aucun problème depuis des mois. Pour la bibliothèque, je recommande d'utiliser YUI3 au lieu de jQuery, il vous permet de construire facilement un webcrawler/scraper en quelques minutes, si vous ne me croyez pas voir this Talk de YUIConf2010, ça fait 40 minutes mais c'est tout à propos du code. Dav Glass a fait un excellent travail en montrant comment il est facile et combien peu de code vous avez besoin, oui il y avait quelques problèmes avec la version différente de jsdom dans la conversation, mais la conversation a été donnée au début de novembre, tellement de cela aurait déjà dû être réparé.

Vous pouvez vérifier toutes les choses de la conversation à son GitHub page.
Et voici son scraper qui reçoit les nouvelles actuelles de Digg. Sérieusement, cela vaut largement la peine de faire fonctionner Node.js sur votre système, car à la fin, vous avez tout le côté génial de YUI3 côté serveur.

+0

Je viens de trouver un autre problème. La méthode jQuerify de jsdom n'exécute pas le rappel environ 80% du temps. Il semble que le rappel onload de l'élément de script ajouté n'est pas exécuté. Il semble étrange que je devrais avoir à simuler un environnement de navigateur complet avec le chargement du script pour effectuer le grattage html. – richcollins

+0

Je suis d'accord. La seule façon de savoir si vous avez le bon marteau est de savoir exactement pourquoi celle que vous avez ne fonctionne pas. Fixez ceci en premier. – NotMe

+0

@richcollins Il n'y a pas besoin de charger les scripts, en fait, à ce jour, aucun framework n'exécute le JS de la page. Tout ce qu'il fait pour l'instant est de fournir exactement la même API que YUI3 dans le navigateur. Ce qui en termes d'interopérabilité est tout simplement top. En outre, je ne pense pas que ce sera un problème de performance en aucune façon. J'ai utilisé par exemple Belle soupe dans le passé et pour être honnête, je ne peux pas imaginer tout ce qui est plus lent que cela:/ –

0

Choisissez la langue que vous préférez ou la langue que vous voulez apprendre le plus. Vous pouvez écrire un robot d'indexation dans n'importe quelle langue.

J'ai personnellement développé des robots d'exploration en Java, Ruby et Perl. Toutes ces langues répondaient à vos besoins. (Oui, même le moteur de balayage de Java avait une empreinte de mémoire raisonnable.) Parmi ceux-ci, Java était mon favori parce qu'il se vantait des bibliothèques HTTP et HTML les plus matures. Si je me retrouve à en écrire un autre, je veux essayer Python par la suite.

Le premier problème algorithmique auquel vous serez confronté est celui de l'identification efficace des pages que vous avez déjà visitées. Cet index d'URL peut devenir très volumineux et doit prendre en charge des recherches et des insertions rapides. Un index de base de données commun fonctionnera dans les premiers prototypes de chenilles mais se révélera rapidement être le goulot d'étranglement.

+0

Je vais juste utiliser mon db (tokyocabinet) Je peux augmenter avec memcache si nécessaire, mais memcache ne devrait pas être nécessaire tant que je peux adapter le db de TC dans la mémoire. – richcollins

0

python et BeautifulSoup, facile à apprendre et très efficace.