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?). . p>
Nous utilisons MongoDB pour la base de données, donc tout ce qui avec des pilotes Solid MongoDB est un avantage. P>
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é. P>
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. P>
4 Réponses :
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. P>
La partie la plus lente de l'opération consiste à faire les demandes HTTP. P>
Si vous parlez vraiment de grande échelle em>, 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 Si un cadre de la carte de carte est surchargé, vous pouvez le garder en python et utiliser mise à jour:
Si vous ne voulez pas d'un cadre MapReduce, et que vous préférez une langue différente, consultez le httplib2 code>
pour effectuer les demandes et lxml code>
pour analyser les résultats. p>
Multipercessing code>
. P>
threadpoolexecuteur code>
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. P>
Vous devez probablement utiliser des outils utilisés pour tester des applications Web (watin ou sélénium). P>
Vous pouvez ensuite composer votre flux de travail séparé des données à l'aide d'un outil que j'ai écrit. P>
https://github.com/leblancmeneses/robusthaven.Integrationtest P>
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. P>
Utilisation de TOPHEFF et NSERVICEBUS, vous pouvez accumuler le nombre de travailleurs horizontalement. P>
FYI: avec mono ces outils que je mentionne peut exécuter sous Linux. (Bien que les milles puissent varier) p>
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. p>
Au fait, NSERVICEBUS fournit (distribution, persistance, sécurité, transactions et fiabilité des travaux de la file d'attente) - Exemple: Github.com / LEBLANCMENESES / NWEBHOOKS
Qu'en est-il de C ++? De nombreuses bibliothèques à grande échelle peuvent vous aider. P>
Boost ASIO peut vous aider à faire le réseau . P>
TinyXML peut analyser les fichiers XML. P>
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. P>