Malgré mes recherches, je n'arrive pas à solutionner le problème suivant :
Je voudrais récupérer un prix sur une page web dont voici le code source.
<span class="price" id="rate_2482">97,00 €</span>
Ce prix pouvant être variable de la dizaine à la centaine, comment faire pour récupérer le prix situé entre >< ??
Cette page contenant plusieurs prix, je pensais que la macro devait identifier dans la page "rate_2482" et récupérer l'info située X caractère plus loin.
Je vous remercie par avance pour votre aide précieuse car je séche complétement.
Re : IE>excel : extraire un prix (variable) sur une page web.
Bonjour,
En cochant les références:
Microsoft HTML Object Library
Microsoft Internet Conrols
Tu commences par
Set IE=New Internet Explorer
IE.NAvigate "http://Note l'url"
Do while IE.readystate <> READYSTATE_COMPLETE or IE.BusyoEvents:Loop
Ensuite, le plus simple, si tu peux localiser le prix là dedans (et l'extraire avec une macro) :
msgbox IE.Document.Body.InnerText
ou sinon en utilisant les tags, si tu les connais:
CollectionHTML = IE.Document.getElementsByTagName("Nom du tag : rate_2482??")
et faire une recherche là dedans
Si tout cela est flou, il faudrait au minimum fournir l'url du site ou tu cherches cette somme, de sorte à ce que je puisse mieux t'aiguiller.
Re : IE>excel : extraire un prix (variable) sur une page web.
Bonjour le fil ,
Si je ne m'abuse, span class me fait beaucoup penser à du XML, donc il faudrait parser le fichier ...
Sinon, le Split proposé par Dranreb devrait fonctionner, mais, si le prix est en gras, il est possible qu'une balise <b> arrive avant le prix, ce qui faussera le Split ...
Sur la base d'une importation dans une feuille Excel
Code:
Sub test()
Dim C As Range
Const Réf As String = "rate_2482"
Dim Match, Matches
Set C = Cells.Find(Réf, lookat:=xlPart)
If Not C Is Nothing Then
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "[0-9,]* €"
MsgBox .Execute(C)(0)
End With
End If
End Sub
devrait ramener le prix quelquesoit le cas de figure !
Bonne journée
Re : IE>excel : extraire un prix (variable) sur une page web.
Merci à tous pour votre participation.
Je ne connaissais pas la fonction split et c'est apparemment efficace.
Cependant, dans la solution fournie par Dranreb, c'est nous qui indiquons le contenu de la variable.
Ce que je voudrais savoir faire c'est comment faire en sorte que la macro trouve "rate_2482" (que l'on trouve une seule fois dans le code source) et affecte à la variable le texte correspondant pour ensuite appliquer la fonction split par exemple...
Hormis s'il y a un moyen plus simple.
merci encore d'avance pour votre participation.
Bien à vous
Re : IE>excel : extraire un prix (variable) sur une page web.
Si le texte à analyser est dans un string S
P = Instr(S, "rate_2482") rend la position dans S de "rate_2482"
et Mid$(S, P) rend la fin de S commençant à P qui peut être utilisée à la place du Z donné dans mon exemple.
Re : IE>excel : extraire un prix (variable) sur une page web.
Hum,tjs pas de réponse à ma remarque, mais essaie ceci... Ca recherche rate_2482 dans le Code source de ta page HTML ET NON DANS UNE FEUILLE EXCEL !
Mais je répète qu'il serait tellement plus simple pour tester ce code de connaitre l'url ! Pque là, je l'ai écrit de tête et en brut, ce qui fait que ne l'ayant pas testé, il est pas garanti que tout fonctionne.
Code:
Sub test()
Set IE=New Internet Explorer
IE.NAvigate "http://..." 'Mettre l'URL à la place des ...
Do while IE.readystate <> READYSTATE_COMPLETE or IE.Busy: doEvents:loop
Msgbox mid(IE.Document.body.innerHTML,instr( IE.Document.body.innerHTML, "rate_2482")+10)
end Sub
Ce que je voudrais savoir faire c'est comment faire en sorte que la macro trouve "rate_2482" (que l'on trouve une seule fois dans le code source) et affecte à la variable le texte correspondant pour ensuite appliquer la fonction split par exemple...
Re : IE>excel : extraire un prix (variable) sur une page web.
Bon je vais essayé de répondre un peu à tout le monde.
Tout d'abord JNP. Je ne sais pas si j'ai bien interpreté votre macro mais j'ai l'impression qu'il faudrait dans un premier temps que je charge le code source dans une feuille excel. Isn't it ? Car j'ai bien inclus votre code dans ma macro mais l'execution passe dessus sans s'y attarder.
Or c'est une recherche une page web. J'ai bien essayé de bidouiller quelque chose en essayant de remplacer cells.find par un IE.find par exemple mais...échec.
Softmama. Ne vous inquiètez pas car sans avoir l'url (qui correspondrait en fait à un troisième page d'un site internet après avoir passé le mot de passe, identifiant etc...) votre code fonctionne hormis qu'il me donne le prix....et le restant du code source.
Je vais essayé de bidouiller ce bout de code pour obtenir...le grall.
Dranreb je n'ai pas encore testé votre précision concernant votre code.
Je vous tiens au courant si je parviens à mon objectif.
Re : IE>excel : extraire un prix (variable) sur une page web.
Re,
Ha donc ok. Tu dois pouvoir t'en sortir ainsi alors:
VB:
Sub test()
Set IE=New Internet Explorer
IE.NAvigate "http://..." 'Mettre l'URL à la place des ...
Do while IE.readystate <> READYSTATE_COMPLETE or IE.Busy: doEvents:loop
A= mid(IE.Document.body.innerHTML,instr( IE.Document.body.innerHTML, "rate_2482")+10)
A= Mid(A, 1, instr(A,"€<"))
Msgbox A
end Sub
Re : IE>excel : extraire un prix (variable) sur une page web.
Eh ben voilà vous avez été plus rapide que moi.
Softmama, je suis impressionné car j'aurais mis un temps fou pour obtenir ce résultat.
Il faudra néanmoins que je planche sur le fonctionnement de tout cela car hormis le résultat, je suis intéressé par la compréhension pour extrapoler à d'autres situations.
Je vous remercie pour votre participation à ce post et j'espère qu'il servira à d'autre internautes.
Je suis rendu à plusieurs forum et encore à la recherche du succès de mon code !
La ligne du code source de ma page web est
<span class="hdca-product__description-pricing-price-value">15,36 $</span>
Sub test()
Set IE=New Internet Explorer
IE.navigate "https://www.homedepot.ca/produit/cg...nneau-de-cloison-seche-ultra-leger/1000686028"
Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop
a = Mid(IE.document.body.innerHTML, InStr(IE.document.body.innerHTML, "hdca-product__description-pricing-price-value") + 10)
a = Mid(a, 1, InStr(a, "$<"))
MsgBox a
End Sub
Le code fourni par Softmama ne fonctionne pas pour une erreur de syntaxe à la deuxième ligne (set IE...)
Je suis toujours sans succès
Si quelqu'un d'entre vous sort du passé de 13 ans hahah
Je suis rendu à plusieurs forum et encore à la recherche du succès de mon code !
La ligne du code source de ma page web est
<span class="hdca-product__description-pricing-price-value">15,36 $</span>
Code:
Sub test()
Set IE=New Internet Explorer
IE.navigate "https://www.homedepot.ca/produit/cgc-sheetrock-1-2-po-x-4-pi-x-8-pi-panneau-de-cloison-seche-ultra-leger/1000686028"
Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop
a = Mid(IE.document.body.innerHTML, InStr(IE.document.body.innerHTML, "hdca-product__description-pricing-price-value") + 10)
a = Mid(a, 1, InStr(a, "$<"))
MsgBox a
End Sub
Le code fourni par Softmama ne fonctionne pas pour une erreur de syntaxe à la deuxième ligne (set IE...)
Je suis toujours sans succès
Si quelqu'un d'entre vous sort du passé de 13 ans hahah
Bonsoir.
Information au cas où il s'agirait de ça :
La bibliothèque SHDocVw, référence "Microsoft Internet Controls" correspondant au fichier ieframe.dll définit une classe InternetExplorer, en un seul mot.
Ça a des chance d'être ça parce que cet objet est bien muni des propriétes Busy, Document et ReadyState, aini que de la méthode Navigate.
Conseil: Déclarez plutôt au début de la procédure:
VB:
Dim IE As New SHDocVw.InternetExplorer
Vous aurez ainsi des liaisons anticipées aux méthodes et propriétés.
Bonsoir.
Information au cas où il s'agirait de ça :
La bibliothèque SHDocVw, référence "Microsoft Internet Controls" correspondant au fichier ieframe.dll définit une classe InternetExplorer, en un seul mot.
Ça a des chance d'être ça parce que cet objet est bien muni des propriétes Busy, Document et ReadyState, aini que de la méthode Navigate.
Conseil: Déclarez plutôt au début de la procédure:
VB:
Dim IE As New SHDocVw.InternetExplorer
Vous aurez ainsi des liaisons anticipées aux méthodes et propriétés.