[regexp] Google URL seulement

Fermé
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 - 27 août 2006 à 19:15
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 29 août 2006 à 09:10
Bonjour,

Dans un post du Forum webmastering affich 2349141 il est demandé comment ne conserver que les liens dans les résultats des moteurs de recherche.
Merci de prendre la peine de le lire.

J'ai pensé que grep, que je viens de découvrir, pouvait être utile et ai donc essayé.
Les résultats que j'obtiens sont presque corrects. Je butte toutefois sur un problème.
Il reste, à la fin du remplacement, une chaîne inutile suivie du motif qui me sert de repère “\&rarr; </p>”

Merci de m'éclairer.
A voir également:

12 réponses

Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
27 août 2006 à 19:27
En fait le motif est plutôt :
“\&rarr; <br />”
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 août 2006 à 21:36
Salut,

j'ai regardé les 2 messages mais pour dire la verité je n'ai pas très bien compris.

Pourquoi?

En général dans le parsing d'un fichier c'est bien d'avoir l'entrée - le traitement - la sortie.

Je crois que les tests que tu fait sont plutôt ponctuels (corrige moi si je me trompe) donc donnée une solution généralisée ce n'est pas si simple.

Par exemple avec Perl tu as des modules sur Cpan pour manipuler des données html.

Les liens on les trouves dans les balises <a href=".....">lien</a>

Donc dans l'absolu tu n'as qu'à récuperer ce que tu trouve entre guillements.

Il faut pourtant tenir compte des pièges. La gourmandise et l'impatience d'une regex (je n'aime pas trop regexp).

lami20j
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
28 août 2006 à 19:00
Bonjour,

“je n'ai pas très bien compris”, ça me rassure car ‘je débute’ (-:
J'aime traiter des données, du texte et ces outils, que je découvre, grep, sed, awk… me plaisent. Perl encore plus, mais je n'en suis pas encore là.
“les tests que tu fait sont plutôt ponctuels”. En effet et je l'indique ‘il faudra adapter’. Ça ne fonctionne que dans l'environnement (Google) que je cite.

La piste que je propose évite d'avoir à écrire un script (une future étape, peut-être ? Du type shell script qui semble plutôt adapté. Ou en Perl, mais plus tard encore.)
Je suis donc contraint, avec l'outil dont je dispose, de traiter dans le fichier (pas de sortie) et donc d'enlever tout ce qui est en trop. Et en un seul passage*.
J'aurais préféré pouvoir récupérer les <a class=l href="…> et les envoyer ailleurs.

En voilà des contraintes.

* paulau profil paulau n'a pas enregistré de profil et c'est son seul message. J'ai supposé qu'il est un utilisateur de Windows de base (?)

+ “des modules sur Cpan” c'est-à-dire ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 août 2006 à 20:11
Salut,

J'aurais préféré pouvoir récupérer les <a class=l href="…> et les envoyer ailleurs.

Je n'aime pas trop d'écrire des regex sans avoir un vision de ce que je cherche.

Dans ton cas la question que je me pose est :

tu veux récuperer les <a class=l href="…> ou supprimer les NON <a class=l href="…>?

CPAN = Comprehensive Perl Archive Network
https://www.cpan.org/
http://www.cpan.org/modules/index.html


lami20j
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
28 août 2006 à 20:34
Merci.

Je veux en effet supprimer tout ce qui n'est pas des href.
Et, tant qu'à faire, ne conserver qu'une seule référence à la même adresse. Et les “class=l” en sont une.
En effet, dans https://www.google.fr/search?as_q=regexp&num=100&hl=fr&lr=lang_fr&gws_rd=ssl Google cite 3 fois la même référence et celle en “class=l” semble être la plus simple à traiter
<a class=l href="http://www.expreg.com/memo.php">REGEX - <b>REGEXP</b> - Expressions régulières en PHP - Aide-mémoire</a>
Les autres sont “En cache” ou “Pages similaires”.

Remarque, ils sont sympas, il mettent des repères <!--a--> ou <!--z--> etc. et leur mise en page en CSS fournit des classes comme <p class=g> <a class=fl href="… Je m'en suis servi dans moteur de recherche extraction selective
(<!--a--><div>… ou (<a class=l href=")

Veux-tu que je tente de t'indiquer à quoi (je suppose !) correspondent mes motifs ?
(<!--a--><div><p [\W\w\s]*?|<table [\W\w\s]*?)(<a class=l href=")(.*?)(">)[\W\w\s]*?(</a>)|(</a>[\W\w\s\D]*?Google</font>)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 août 2006 à 22:00
Re,

Voilà ce que ça donne en Perl (je répète, c'est superficiel)
J'ai sauvegarder le code source dans gihef.txt
#! /usr/bin/perl
#
use strict;use warnings;

open FIC,"gihef.txt"
    or die "E/S : $!\n";

while ( <FIC> ) {
    print $1,"\n" if /<a\s*class=l\s*href="(http:\/\/.*?)">/g;
}
lami20j
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
28 août 2006 à 22:27
Ça marche.
Je l'ai enregistré dans le dossier prévu pour les scripts de TW en convertissant les fins de lignes pour Unix et hop…
Et puis, comme “c'est superficiel”, je comprends.

Tu pourrais me faire le même mais en me conservant un doc. html ?
C'est à dire avec des liens cliquables.
Du genre :
<html><head>…<body>
<a href="http://www.expreg.com/">http://www.expreg.com/</a>
…
</html>

Tu vois. Chaque adresse reprise commme texte du lien.

Faut vraiment que je me mette à Perl (-:
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 août 2006 à 22:36
#! /usr/bin/perl
#
use strict;use warnings;

open FIC,"gihef.txt"
    or die "E/S : $!\n";

print "<html><head>..<head>\n";
print "<body>";
while ( <FIC> ) {
    print "<a href=\"$1\">$1</a>","\n" 
    if /<a\s*class=l\s*href="(http:\/\/.*?)">/g;
}
print "</body>\n</html>\n";
lami20j
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
28 août 2006 à 22:42
En essayant, ça ne pourrait pas ressembler à :
print "<a>",$1,"\">",$1,</a>",\n" if /<a\s*class=l\s*href="(http:\/\/.*?)">/g;
 ?

J'essaye.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 août 2006 à 22:46
Non,puisque la partie href= ne setrouve pas dans $1

lami20j
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
28 août 2006 à 22:50
En effet, j'ai été une peu vite.
En corrigeant, j'ai fait ça :
    print "<a href=\">",$1,"\">",$1,"</a>","\n" if /<a\s*class=l\s*href="(http:\/\/.*?)">/g;
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023
28 août 2006 à 22:56
Je ne sais pas pourquoi tu veux donner une liste au print quand une chaine fait l'affaire? Mais t'est libre de faire comme bon te semble.

En revanche ce n'est pas bon non plus.

href="...

et chez toi je vois

href=">....

lami20j
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
28 août 2006 à 22:45
J'ai fait exactement ce genre de chose en Python, justement:
https://sebsauvage.net/python/snyppets/index.html#google_search

ça ne ramène les liens, et que les liens.
et ça parcours automatiquement les pages de résultat.

Libre à vous de réutiliser le source ou juste la regex.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 août 2006 à 22:48
Salut,

merci.

Comme je l'ai déjà dit, un jour je me mettrai au python.

Le code je peux le comprendre, mais pour l'instant je n'ai pas vraiment le temps de commencer ;)

Tu sais que les Perliens sont des paresseux ;)

lami20j
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
28 août 2006 à 23:09
Merci à vous,

On pourrait finir en chanson :

“… You know, my Python boot is too tight
I could'nt get it off last night
A week went by
And now it's July
I finally got it off
And my girlfriend cried
You've got…”

… à votre avis ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 août 2006 à 23:22
Oui pas mal,

mais je pense toujours au perles qu'aux serpents

Regarde ça https://en.wikipedia.org/wiki/Black_Perl

Et je reste toujours avec l'opinion que la lisibilité du langage depends de celui qui écrit le code et pas de langage lui même.

Maintenant il nous reste qu'à comprendre les mots.

Une calligraphie japonaise est très lisible, mais celui qui ne comprends pas les mot, peut-il dire que c'est ilisible?

De même pour le regex, et en fait pour n'importe quel langage.

lami20j

P.S. Voilà un lien cadeau https://docstore.mik.ua/orelly/bookshelfs.html
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
29 août 2006 à 09:10
oohh.... joli !

Je suis impressionné.
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 775
28 août 2006 à 23:31
Merci.
0