8
votes

Quelle technologie pour gratter à grande échelle / analyse?

Nous concevons un projet de raclage / analyse en bande de grande échelle. Fondamentalement, le script doit passer par une liste de pages Web, extraire le contenu d'une balise particulière et la stocker dans une base de données. Quelle langue recommanderiez-vous de faire cela à grande échelle (dizaines de millions de pages?). .

Nous utilisons MongoDB pour la base de données, donc tout ce qui avec des pilotes Solid MongoDB est un avantage.

Jusqu'à présent, nous avons utilisé (ne riez pas) PHP, CURL et Simple HTML DOM Parser Mais je ne pense pas que cela soit évolutif pour des millions de pages, d'autant plus que PHP n'a pas de multithreading approprié.

Nous avons besoin de quelque chose qui est facile à développer, peut exécuter sur un serveur Linux, dispose d'un analyseur HTML / DOM robuste pour extraire facilement cette balise et peut facilement télécharger des millions de pages Web dans une durée raisonnable. Nous ne recherchons pas vraiment de chenilles Web, car nous n'avons pas besoin de suivre les liens et de l'indexer tout le contenu, nous devons simplement extraire une balise de chaque page sur une liste.


0 commentaires

4 Réponses :


1
votes

Je fais quelque chose de similaire à l'aide de Java avec la bibliothèque des communes httpClient. Bien que j'évite l'analyseur Dom, car je recherche une balise spécifique qui peut être trouvée facilement à partir d'une regex.

La partie la plus lente de l'opération consiste à faire les demandes HTTP.


0 commentaires

7
votes

Si vous parlez vraiment de grande échelle , vous voudrez probablement quelque chose qui vous permet d'échouer horizontalement, par exemple un framework de carte de carte comme hadoop . Vous pouvez écrire des emplois Hadoop dans un certain nombre de langues, vous n'êtes donc pas lié à Java. Voici un article sur Ecrire des emplois Hadoop à Python , par exemple. BTW, c'est probablement la langue que j'utiliserais, grâce à des libs comme httplib2 pour effectuer les demandes et lxml pour analyser les résultats.

Si un cadre de la carte de carte est surchargé, vous pouvez le garder en python et utiliser Multipercessing .

mise à jour: Si vous ne voulez pas d'un cadre MapReduce, et que vous préférez une langue différente, consultez le threadpoolexecuteur en Java. J'utiliserais certainement les trucs du client HTTP Apache Commons HTTP, cependant. Les trucs dans le JDK proprement dûment respectueux des programmeurs.


0 commentaires

3
votes

Vous devez probablement utiliser des outils utilisés pour tester des applications Web (watin ou sélénium).

Vous pouvez ensuite composer votre flux de travail séparé des données à l'aide d'un outil que j'ai écrit.

https://github.com/leblancmeneses/robusthaven.Integrationtest

Vous ne devriez pas avoir à analyser manuel lors de l'utilisation de wattin ou de sélénium. Vous allez plutôt écrire un querySelector CSS.

Utilisation de TOPHEFF et NSERVICEBUS, vous pouvez accumuler le nombre de travailleurs horizontalement.

FYI: avec mono ces outils que je mentionne peut exécuter sous Linux. (Bien que les milles puissent varier)

Si JavaScript n'a pas besoin d'être évalué pour charger des données de manière dynamique: Tout ce qui oblige le document à charger en mémoire va du temps perdu. Si vous savez où votre tag est, tout ce dont vous avez besoin est un analyseur SAX.


1 commentaires

Au fait, NSERVICEBUS fournit (distribution, persistance, sécurité, transactions et fiabilité des travaux de la file d'attente) - Exemple: Github.com / LEBLANCMENESES / NWEBHOOKS



0
votes

Qu'en est-il de C ++? De nombreuses bibliothèques à grande échelle peuvent vous aider.

Boost ASIO peut vous aider à faire le réseau .

TinyXML peut analyser les fichiers XML.

Je n'ai aucune idée de la base de données, mais presque toutes les bases de données ont des interfaces pour C ++, ce n'est pas un problème.


0 commentaires