J'écris une araignée à Python pour crawler un site. Le problème est que je dois examiner environ 2,5 millions de pages, afin que je puisse vraiment utiliser une aide d'aide à la rendre optimisée pour la vitesse. P>
Ce que je dois faire est d'examiner les pages d'un certain nombre et s'il est trouvé d'enregistrer le lien vers la page. L'araignée est très simple, elle doit simplement trier de nombreuses pages. P>
Je suis complètement nouveau à Python, mais j'ai utilisé Java et C ++ avant. Je n'ai pas encore de commencer à le coder, de sorte que toute recommandation sur les bibliothèques ou les cadres à inclure serait formidable. Toute astuces d'optimisation est également grandement appréciée. P>
6 Réponses :
Vous pouvez utiliser Mapreduce comme Google, soit via hadoop (spécifiquement avec python: 1 et 2 ) , disco ou Happy . P>
La ligne de pensée traditionnelle, écrit votre programme dans Standard Python, si vous trouvez que c'est trop lent, profiler et optimiser les points lents spécifiques. Vous pouvez faire de ces points lents plus rapidement en laissant tomber sur C, en utilisant C / C ++ Extensions ou même CTTPES . P>
Si vous arrachez un seul site, envisagez d'utiliser wget -r code> ( un exemple ). p>
Wget supporte-t-il uniquement la récupération du HTML? Je ne veux pas être plus d'un drain que je dois.
YeP, le drapeau -A code> sur wget vous permet de spécifier les extensions acceptées et
-r code> Spécifiez-vous les extensions rejetées. Donc, vous pouvez faire quelque chose comme
wget -r.gif, .jpg -r exemple.com code>
Un wget avec C ++ / C # sera-t-il plus rapide (s'il est multi-fileté) que l'équivalent de Python?
La partie la plus lente du programme va être les connexions réseau. Chaque connexion va être d'au moins 100 ms et passer de Python à C / C ++ ne va pas se raser quelques millisecondes. Dans le grand schéma des choses, Python sera tout aussi rapide.
+1 pour wget - et si vous vérifiez votre propre site Web sur votre propre serveur, Wget pourrait réellement être mesurablement plus rapide
Spidering Sonbody's Site avec des millions de demandes n'est pas très polie. Pouvez-vous plutôt demander au webmaster pour une archive du site? Une fois que vous avez cela, c'est une simple question de recherche de texte. P>
Le site Web n'est pas en anglais, et je ne parle pas la langue à poser. En outre, il s'agit d'un site d'image de trafic très élevé (une autre raison pour laquelle je ne peux pas vraiment demander) et je n'ai besoin que du code HTML de chaque page, j'espère que je ne serai pas un drain sur leurs serveurs. Je prévois seulement d'arracher chaque page une fois et de ne jamais revenir pour les mises à jour.
Où stockez-vous les résultats? Vous pouvez utiliser bibliothèque en nuage Picloud pour paralléser votre raclage facilement sur un groupe de serveurs. P>
J'ai juste une station de travail avec un petit tableau RAID et les ordinateurs de quelques volontaires. Je prévois uniquement de stocker certaines des pages qui ont le terme de recherche pertinent, qui devrait être <1%
Moins les données pour stocker le mieux. Si vous vous trouvez besoin de plus de puissance de calcul (le parallélisme accélérera grandement ce que vous faites), essayez définitivement Picloud.
Vous gaspillez beaucoup de temps en attente des demandes de réseau lorsqu'ils sont spidés. Vous voudrez donc certainement faire vos demandes en parallèle. Je sauverrais probablement les données de résultat sur le disque et ensuite avoir une seconde boucle de processus sur les fichiers à la recherche du terme. Cette phase pourrait facilement être distribuée sur plusieurs machines si vous aviez besoin de performances supplémentaires. P>
Comme vous êtes nouveau à Python, je pense que ce qui suit peut être utile pour vous :) p>
Correction d'une partie de la mise en forme de votre message, espérons que cela ne vous dérange pas :) Bienvenue pour!
Qu'est-ce que Adam a dit. Je l'ai fait une fois pour cartographier le réseau de Xanga. La façon dont je l'ai rendue plus rapide est d'avoir un ensemble de fil-coffre-fort contenant tous les noms d'utilisateur que je devais lever les yeux. Ensuite, j'avais 5 files de discussion à la fois et à les traiter. Vous allez passer beaucoup plus de temps à attendre la page à DL que vous ne traiterez aucun du texte (le plus probable), alors trouver simplement des moyens d'augmenter le nombre de demandes que vous pouvez obtenir en même temps. P>
Votre meilleur pari pour rendre le processus plus rapide est d'améliorer la vitesse de votre connexion. Ce sera votre goulot d'étranglement, pas de vitesse python.