SCRUTER UNE PAGE WEB À LA RECHERCHE DES LIENS ET DES ADRESSES MAIL

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 6 févr. 2008 à 11:59
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008 - 10 févr. 2008 à 11:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45646-scruter-une-page-web-a-la-recherche-des-liens-et-des-adresses-mail

FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
10 févr. 2008 à 11:22
C'est marrant ca ;)
Ben oui, c'est possible en fait. J'avais pas pensé à intervertir le deux pour voir le résultat.

Et tu dois avoir raison, la regExp doit au final être compilée de manière semblable pour les deux expressions.

Donc on a trollé pour rien :)
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
10 févr. 2008 à 02:13
Hum... A mon avis tu n'a pas fais assez de tour de boucle ...
Je ne dit pas ca parcque j'aime pas avoir tord pas du tout :)
J'ai converti ton code en C# (j'aime pas le VB desole)

static void Main(string[] args)
{
long score = 0;

Stopwatch w = new Stopwatch();
Regex e1 = new Regex("href=['"]?(.*)[> '"]");
Regex e2 = new Regex("href=(|'|")(.*)(>| |'|")");
string test = "Some text";

w.Reset();
w.Start();
for(int x = 0; x < 10000; ++x)
e1.Matches(test);
w.Stop();
score = w.ElapsedTicks;

w.Reset();
w.Start();
for(int x = 0; x < 10000; ++x)
e2.Matches("Some text");
w.Stop();
MessageBox.Show("Ma méthode " + score.ToString() + "\n" +
"Ta méthode " + w.ElapsedTicks.ToString());
}

J'obtiens n'importe quoi ...
Des fois ma méthode est 10 fois plus longues que la tienne !!!
Et si j'inverse e1 et e2 ca refait le meme résultat (en faveur de ma méthode :) )--> il doit y avoir un biais du langage
Des fois non, les résultats sont très similaires.
Donc j'augmente le nombre de tour de boucle (10 000 000)
La j'obtiens le résultat suivant : les deux sont vraiment très identiques
L'un surpassant l'autre (de très peu) à chaque fois que je relance...
Quand on y réfléchit c'est très logique !
Les graphes internes sont équivalents en terme de chemin !
Les résultats sont donc équivalents, cela dit je note que la première méthode testée subit toujours un petit temps supplémentaire par rapport à l'autre
(Ta méthode semblait être quelques millièmes (voire un centieme) plus rapide que la mienne mais quand j'ai inversé e1 et e2 c'est la tendance inverse que j'ai constaté)

Moralité : On (je ?) trolle pour rien :p
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
6 févr. 2008 à 22:41
Désolé pour toi, mais en DotNet au moins, ma méthode est donnée plus rapide : +/-12000t à +/-6500t sur mon PC.

Voici mon code de test, qui me semble tout à fait équitable :

Dim w As New Stopwatch()
Dim e1 As New System.Text.RegularExpressions.Regex("href=['""]?(.*)[> '""]")
Dim e2 As New System.Text.RegularExpressions.Regex("href=(|'|"")(.*)(>| |'|"")")

w.Start()
For x As Integer = 0 To 10000
e1.Matches("[ Some text]")
Next
w.Stop()
MessageBox.Show(w.ElapsedTicks)
w.Reset()

w.Start()
For x As Integer = 0 To 10000
e2.Matches("[ Some text]")
Next
w.Stop()
MessageBox.Show(w.ElapsedTicks)
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
6 févr. 2008 à 22:36
Vieille habitude de JavaScript, quand j'ai commencé à apprendre les regexp.
Au début j'utilisais souvent (|'|") et c'est resté. Quand j'utilse [], c'est pas pour faire des choix, mais bien pour faire des ranges [a-zA-Z0-9$_]*, ca me parait plus logique et plus proche de ce pourquoi il a été créé.

Mais bon c'est vrai que ['"]? fait le même travail que (|'|"), peut-être plus vite, ca reste à voir. Je vais faire un test et je te tiens au courrant

Par contre pour l'intérêt, je suis aussi de ton avis... Mais bon, c'est toujours utile de se trouver des objectifs inutiles pour tester ses connaissances et les approfondir...

De toute facon, l'intérêt majeur réside ici dans la recherche des liens, je pense...
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
6 févr. 2008 à 18:32
Mon dieu que c'est laid (même sans réfléchir) ...
(|'|") est equivalent a ['"]?
et en plus ça ne capture pas (donc c'est plus rapide)
Voire même pour accelerer autant capturer les caractères (ou chaine) de début et de fin et les retirer lorsqu'on exploite le résultat de la regexp
Ca sera plus rapide aussi puisque que la regexp sera déterministe.

Sinon quel interêt de trouver des adresses mail dans une page
si ce n'est pour spammer ?
cs_developper_man Messages postés 13 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 février 2012
6 févr. 2008 à 12:21
merci
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
6 févr. 2008 à 12:06
2 regexp quand même pas.
Je penses qu'il en faudrait au moins 3/4.

Comme ca, sans réfléchir, je dirais :
Lien/images :/(href|src)=(|'|")([^ '"]*)( |\>|'|")/
CSS : /url\((|'|")([^'"]*)(|'|")\)/
Texte et/ou javascript : /(https?\:\/\/[^ ]*\s+|www\.[^ ]*\s+)/

Mais bon, faudrait approfondir et tester [:)]
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 févr. 2008 à 11:59
mouaip... beaucoup de chose pour pas grand chose : 2 regex et le tour est joué :)
Rejoignez-nous