Forum dédié au moteur de recherche et aux techniques d'optimisation par #taggle
Vous n'�tes pas identifi�.
Bonjour tlm,
j'ai trouvé un bout de script pour récuperer les liens d'une page web
<?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
++
Hors ligne
Salut,
vla ton code modifié :
<?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"; } ?>
Hors ligne
Quel intérêt de récupérer les ancres sur une page web... surtout s'il y en a des centaines ?
Hors ligne
Je crois que Toms cherche à récupérer les ancres/titres (anchor text) des liens.
J'ai que ça pour le moment :
<?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
Raah, forcément c'est de suite plus logique
<?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
Hors ligne
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 )
Hors ligne
>> <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
Merci à tous, c'est nickel
Hors ligne
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)
Hors ligne
la pattern .* est "gratuite" puisqu'il n'y a aucun test a faire sinon aller au caractère suivant
Hors ligne