|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Bonjour
Je bute sur une regex et je n'arrive pas à continuer mon boulot sans elle, alors après quelques recherches infructueuses je me permet de vous solliciter pour trouver mon bonheur :p. En bref à partir du code HTML d'une page je souhaite obtenir un lien qui contient un mot clé et capturer différentes partie de ce lien, exemple (ici le mot clé sera "contact") : Code :
<a href="presse/nous-contacter/" >Nous contacter</a> Code :
(<a [^>]*href=["']{1})([^"']*)(["']{1}[^>]*>[^<]*?contact[^<]*?</a>) Ce que je cherche à faire c'est capturer un lien peu importe ce qu'il y a comme balises (sauf </a> balise fermante du lien..) entre <a> et </a> , mais je n'y parviens pas Un petit coup de main ne serait pas de refus J'espère que je ne vous ai pas perdu en route, je ne suis pas très doué pour les explications... Merci |
|
|
10
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
pour parser du HTML c'est DOMDocument et grace a XPath tu pourras faire une recherche sur le mot désiré
__________________
http://blog.stealth35.com/ |
|
|
20
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Re, merci de ta réponse,
Je suis au courant qu'il existe des library pour parser du HTML j'utilise simple_html_dom pour une autre partie de mon script. Ici vu que mon critère de recherche est entre les balises et non un attribut des balises, cela reviendrait à parser tous les liens puis faire une recherche dans chacun d'eux... je ne sais pas si cela serait efficace niveau perf. J'ai regardé un peu la doc XPath (que je ne connaissais pas au passage, merci) mais je ne vois pas trop comment cette lib pourrait m'aider... Il me semble que le problème soit le même on peut trier en fonction des attributs mais pas du contenu, si ? Je me trompe peut-être, j'ai juste regardé vite fait XPath mais des exemples que j'ai vu aucun ne présente la possibilité de faire ce que je souhaite. Je passerais par la méthode du parser + recherche individuelle si rien de mieux ne se présente |
|
|
10
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
tu peux faire ça avec la fonctions contains de xpath :
http://support.microsoft.com/kb/304265
__________________
http://blog.stealth35.com/ |
|
|
10
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Hum.. ça parait bien, merci je met résolu si je réussi à l'implémenter
|
|
|
10
|
|
|
#6 | ||
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Encore moi, il doit y avoir un truc qui m’échappe...
J'ai fait ceci : Code :
cf php.net Edit : En fait si je met un echo "test"; dans ma boucle ça n'affiche toujours rien donc je suppose que c'est ma requête xpath qui ne renvoie pas de résultat, y aurait-il une erreur de syntaxe ? |
||
|
|
10
|
|
|
#7 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
il faut toujours mettre le niveau d'erreur au maximum quand tu développes,
asXML c'est du SimpleXML pas du DOMDocument
__________________
http://blog.stealth35.com/ |
|
|
10
|
|
|
#8 | ||
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Mon niveau d'erreur est à E_ALL | E_STRICT et j'ai mis le "@" devant le load parce que certaines pages que je scan sont tellement mal faites qu'elles génèrent des warning lors du chargement
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: error parsing attribute name in Entity, line: 29 in C:\wamp\www\getContact\lib.php on line 12 J'ai test saveHTML() mais nada... Code :
|
||
|
|
10
|
|
|
#9 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
pour ne pas afficher les erreurs c'est libxml_use_internal_errors
saveHTML() ne marche que sur un DOMDocument, si tu veux voir le contenu du node c'est nodeValue t'as boucle n'est pas bonne non plus, utilise un foreach sur $elements
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#10 | ||
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Code :
Je sens que je vais passer sur une autre solution Par contre pour nodeValue c'est pas tout à fait ce que je veux, je souhaite récupérer le code html pas le contenu de la balise. |
||
|
|
10
|
|
|
#11 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
je comprend pas ta mis 3 code et t'as fait 3 requêtes différentes... pourquoi ?
si tu veux récupérer le lien il faut faire un getAttribute avec href, ou directe le faire dans ta requete xpath ( @href)
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#12 | ||
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Oui désolé, c'est que j'ai fait quelques test et j'ai pas fait gaffe à ce que je copiais, en gros ce que je veux c'est trouver les liens qui contiennent "contact" entre leurs balises et récupérer l'adresse qu'ils pointent.
Ex : Il n'y a pas contact dans le href mais on s'en fou on veut juste que ce soit dans les balises donc on choppe "pouet/" comme adresse. Pensant que le problème venait du contains j'avais test sur n'importe quel lien mais même résultat. Sinon bah j'ai contourné le problème avec une autre méthode plus lente... : Code :
|
||
|
|
10
|
|
|
#13 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
la requete xpath c'est : //a[contains(.,'contact')]/@href
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#14 | ||||
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Code :
Code :
|
||||
|
|
10
|
|
|
#15 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
tu vérifies même pas les valeurs de retour, le @href te reverras un DOMAttr, y'a pas de nodeValue
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#16 |
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
?
|
|
|
10
|
|
|
#17 |
![]() ![]() Inscription : septembre 2010 Messages : 7 103 ![]() |
Bizarre la page n'est pas valide ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Re, désolé de ne pas avoir répondu plus tôt, les pages ne sont pas toujours valides en effet, la solution que j'ai proposée au dessus est correcte niveau performance et répond à mes attentes donc je pense que je vais laisser tel quel.
Merci de ton aide |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com