2010-04-18 3 views
2

J'ai environ 5 Go de données html que je veux traiter pour trouver des liens vers un ensemble de sites Web et effectuer un filtrage supplémentaire. À l'heure actuelle, j'utilise une simple expression rationnelle pour chaque site et je les parcoure à la recherche de correspondances. Dans mon cas, les liens peuvent être en dehors de "a" tags et ne pas être bien formés de plusieurs façons (comme "\ n" au milieu du lien) alors j'essaie de saisir autant de "liens" que je peux et les vérifier plus tard autres scripts (donc pas BeatifulSoup \ lxml \ etc). Le problème est que mon script est assez lent, donc je pense à tous les moyens de l'accélérer. J'écris un ensemble de test pour vérifier les différentes approches, mais j'espère obtenir quelques conseils :)Extrait tout ce qui ressemble à des liens de grande quantité de données en python

En ce moment je pense à obtenir tous les liens sans filtrer d'abord (peut-être en utilisant le module C ou l'application autonome, qui n'utilise pas regexp mais simple recherche pour obtenir le début et la fin de chaque lien) et ensuite en utilisant regexp pour correspondre à ceux dont j'ai besoin.

+1

avez-vous essayé de paralléliser cela en utilisant plusieurs processus? – fabrizioM

+0

Oui, j'utilise le module de file d'attente pour analyser autant de données que mon CPU peut gérer – Riz

+0

Obtenez un processeur plus rapide. Désolé ... je n'ai pas pu résister. –

Répondre

1

Modifications.

  • paralléliser
  • Profil de votre code pour voir le goulot d'étranglement est où. Le résultat est souvent surprenant.
  • Utilisez une seule expression rationnelle (concaténer en utilisant |) plutôt que plusieurs.
Questions connexes