#1 09-05-2007 18:37:03

tom_sawyer
Search & Replace
Lieu: Lyon
Date d'inscription: 29-09-2005
Messages: 2068
Site web

Récupérer l'ancre des liens d'une page avec PHP

Bonjour tlm,

j'ai trouvé un bout de script pour récuperer les liens d'une page web

Code:

<?php

$chaine = file_get_contents("http://www.yahoo.com");

$motif='#<a href="(.*?)"(.*?)>#is';

preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);

foreach ($out[1] as $link) {
echo "$link <br />";
}

?>

A la place de l'URL du lien, j'aimerai récupérer l'ancre. Quelqu'un saurait-il m'expliquer comment modifier l'expression régulière pour faire ça ?

Merci smile
++

Hors ligne

 

#2 09-05-2007 19:20:28

Phobos
'tetine'
Lieu: Marseille
Date d'inscription: 16-07-2005
Messages: 867
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

Salut,
vla ton code modifié :

Code:

<?php

$chaine = file_get_contents("http://fr.wikipedia.org/wiki/Heavy_metal_%28musique%29"); // y a pas d'ancres sur yahoo.com :P

$motif='|<a href="[^"]*#(.+)".*>|Ui';

preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);

foreach ($out[1] as $link) {
echo $link." <br />\n";
}

?>

Forum - Taggle Boost - Novetys
dispo par mail, me cherchez pas trop sur msn, irc ou Gtalk wink

Hors ligne

 

#3 09-05-2007 19:33:12

Americas
Survivors
Lieu: Argentine
Date d'inscription: 04-07-2005
Messages: 4603
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

Quel intérêt de récupérer les ancres sur une page web... surtout s'il y en a des centaines ? neutral

Hors ligne

 

#4 09-05-2007 19:50:47

Tiger
Survivors
Lieu: 78
Date d'inscription: 08-06-2006
Messages: 640
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

Je crois que Toms cherche à récupérer les ancres/titres (anchor text) des liens.

J'ai que ça pour le moment :

Code:

<?php

$chaine = file_get_contents("http://www.yahoo.fr");

$motif='`<a href="[^>]+">[^<]+</a>`Ui'; 

preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);

foreach ($out[0] as $link) {
echo "$link <br />";
}

?>

Hors ligne

 

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/tgarchive/forum/include/parser.php on line 414

#5 09-05-2007 19:56:38

Phobos
'tetine'
Lieu: Marseille
Date d'inscription: 16-07-2005
Messages: 867
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

Raah, forcément c'est de suite plus logique lol

Code:

<?php

$chaine = file_get_contents("http://www.yahoo.com");

$motif='#<a href=".*?"(.*?)>#is';

preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);

foreach ($out[1] as $link) {
echo "$link <br />";
}

?>

Suffit de virer la première parenthèse, dans $out[1] on recupère le tableau des différents contenus des parenthèses capturantes smile


Forum - Taggle Boost - Novetys
dispo par mail, me cherchez pas trop sur msn, irc ou Gtalk wink

Hors ligne

 

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/tgarchive/forum/include/parser.php on line 414

#6 09-05-2007 20:19:56

Malaiac
Survivors
Lieu: Naoned / Frehel
Date d'inscription: 15-06-2006
Messages: 1323
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

En ce qui concerne les regex sur des liens, je deviens de plus en plus méfiant
En particulier sur le ", qui n'est pas toujours inclus. (allez voir le source de francesurf.net par exemple)

du coup moi je penche plutot pour des motifs comme :
<a href="?.*?"?(.*?)>.*?</a>
ou
<a href="?[^>]+"?>[^<]+</a>
( avec "? qui rend le " optionnel )


One Content to rule them all, One Engine to find them,
One Link to bring them all, And in the darkness bind them.

Hors ligne

 

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/tgarchive/forum/include/parser.php on line 414

#7 10-05-2007 09:51:44

salemioche
Survivors
Lieu: blue sky
Date d'inscription: 06-07-2005
Messages: 4128
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

>> <a href="?[^>]+"?>[^<]+</a>

sur

<a href=index.php target=_blank>toto</a>

ca va le faire pour l'anchor mais pas pour l'url

Hors ligne

 

#8 10-05-2007 10:57:14

tom_sawyer
Search & Replace
Lieu: Lyon
Date d'inscription: 29-09-2005
Messages: 2068
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

Merci à tous, c'est nickel smile

Hors ligne

 

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/tgarchive/forum/include/parser.php on line 313

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/tgarchive/forum/include/parser.php on line 414

#9 10-05-2007 11:05:53

Malaiac
Survivors
Lieu: Naoned / Frehel
Date d'inscription: 15-06-2006
Messages: 1323
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

salemioche a �crit:

>> <a href="?[^>]+"?>[^<]+</a>

sur

<a href=index.php target=_blank>toto</a>

ca va le faire pour l'anchor mais pas pour l'url

C vrai
Du coup :
<a href="?([^>\ ]+)"?.*?>([^<]+)</a>
ca tient
<a href="?([^>\ ]+)"?[^>]*?>([^<]+)</a>
aussi, mais je vois la différence pratique entre .*? et [^>]? (je crois que les classes non exclusives sont moins cheres en ressources ?)

Derni�re modification par Malaiac (10-05-2007 11:07:52)


One Content to rule them all, One Engine to find them,
One Link to bring them all, And in the darkness bind them.

Hors ligne

 

#10 10-05-2007 11:32:18

salemioche
Survivors
Lieu: blue sky
Date d'inscription: 06-07-2005
Messages: 4128
Site web

Re: Récupérer l'ancre des liens d'une page avec PHP

la pattern .* est "gratuite" puisqu'il n'y a aucun test a faire sinon aller au caractère suivant

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 R. Andersson