Page 1 sur 1
[R] Récupérer une partie du code source de la page web
Posté : mer. 29 déc. 2010 23:53
par mystere
Bonjour, je cherche à récupérer des données dans un code source d’une page web. Ces données change tout les jours. Par exemple je voudrai retrouver ces caractères « |EUR" /> », « |GBP" /> »…etc (avec respecter la case et boucler pour ce qui utilise notepad++ dans la programmation de site web). Voici un aperçu lorsque ces fait manuellement.
http://img4.hostingpics.net/pics/207640a.png
Une foie que le scripte a retrouvé les caractères. J’aimerai a partir de la récupéré tout le caractère de cette ligne. Voici un aperçu lorsque ces fait manuellement.
http://img4.hostingpics.net/pics/138537e.png
Voici le début de mon code source encore pauvre.
Code : Tout sélectionner
inetget("page source.html","test.html",1)
$fichier=fileopen("test.html",0)
$lectiure=fileread($fichier)
Merci de m’aidez. Pour la suite je me débrouille.

Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 10:37
par legend
Bonjour,
Essaye de voir les commandes qui commencent par string . . .
Celle qu'il te faut la c'est "stringsplit".
J'explique dans cet exemple :
Code : Tout sélectionner
$texte = "lol |EUR voici |EUR un exemple |EUR regarde"
$split = stringsplit ($texte, "|EUR", 1) ; le flag 1 est nécessaire si tu cherche un mot et pas un seul caractére.
sa donnera :
$split[0] = nombre de "|EUR" dans le texte. (3)
$split[1] = texte avant le 1er "|EUR" ("lol ")
$split[2] = texte aprés le 1er "|EUR" ("voici")
$split[3] = texte aprés le 2eme "|EUR" ("un exemple")
etc
ce qui veut dire sa partage le texte sur plusieurs parties.
si tu veux garder le "|EUR" dans le texte t'a qu'a l'ajouter manuellement aprés.
pour le remplacer par autre caractére fait un stringreplace.
enfin je sais pas ce que tu veux faire exactement, mais l'aide autoit t'aidera.
Bonne journée
Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 11:40
par GELDROC
un petit supplément assez pratique :
Code : Tout sélectionner
_IENavigate ($oIE, "http://www.rise-of-lich-king.fr/index.php")
$oDiv = _IEGetObjById ($oIE, "right")
$sReturn = _IEPropertyGet($oDiv, "innerText")
Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 17:12
par bloodwolff
Euh d'après le premier screen vous cherchez simplement à faire un stringreplace
Code : Tout sélectionner
#include <inet.au3>
$url = "www.autoit.fr"
$source = _INetGetSource($url)
Dim $string[3][2] = [ _
["string a rechercher", "String de remplacement"] , _
['|EUR" />', "repl1"] , _
['|GBP" />', "repl2"]]
For $i = 0 To UBound($string)-1
$source = StringReplace($source, $string[$i][0], $string[$i][1])
Next
ConsoleWrite($source)
Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 18:09
par mystere
Merci de vos réponses, mais je ne cherche pas a remplacé le texte, mais seulement a le retrouvé dans le code source. Une foie que je les retrouvé, j’aimerai récupérer uniquement la ligne ou il a étai retrouvé.
Pour mieux comprendre ce que j'aimerais faire j’explique le truc que je vais faire âpres avoir réussi a récupéré la ligne de code (je sais faire ce passage ces pas un problème).
Donc une foie que j’ai récupéré la ligne ou ce situ le mot que je recherche (c’est sa ou je bloque). J’aurai donc ce résultat stocké dans une variable.
<input type="hidden" name="unit" value="0.111116|20101229|EUR" />
Après je fais :
J’aurai donc comme résultat
0.111116|20101229|EUR" />
Puis je récupère avec un truc ou je bloque aussi tout les caractères âpres |2010 y compris |2010.
Une foie que j’ai récupéré la chaine, bun je la supprime avec
J’aurai donc comme résultat final.
0.111116
Je bloque ici.
Code : Tout sélectionner
#include <inet.au3>
$url = "site-web"
$source = _INetGetSource($url)
clipput($source)
Une foie que j’ai récupéré la source je ne sais que faire après pour récupère la ligne entière dans la source.
Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 18:23
par bloodwolff
Tente
Code : Tout sélectionner
#include <inet.au3>
#include <Array.au3>
$url = "www.autoit.fr"
$source = _INetGetSource($url)
$array = StringRegExp($source, 'value="([[:digit:].]+?)\|\d+?\|EUR" />', 3)
_ArrayDisplay($array)
Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 19:39
par GELDROC
sinon ci tu pouvais nous donner simplement le code sources du site au complet en retirant tes donner personnel personnels bien sur ce serai plus simple pou nous .
Re: [..] Récupérer une partie du code source de la page web
Posté : jeu. 30 déc. 2010 21:53
par mystere
Merci de ta réponse bloodwolff, sa fonctionne, mais j’aimerais savoir comment traiter directement l’information, je ne sais pas pourquoi mais msgbox et clipput ne fonctionne pas.
Quand je fais copy selected a partir de _arraydisplay, j’obtiens ce résultat.
[0]|0.110955
Vus comme sa ce présente j’ai bien peur que si je traite la variable directement cela ne fonctionne. Car âpres je compte ouvrir un fichier pour faire des modifications a partir de la variable $trouve.
PS : aujourd’hui c’est 0.110955 et non 0.111116. Sa change tout les jours.

PS : GELDROC, c'est bon sa fonctionne plus qu'a comprendre quelque formalité et le problèmme sera résolut.
EDIT : Ce que je pensais s’avère vrais. En effet je bloque maintenant ici. Le stringreplace ne fonctionne pas. Mais normalement il doit fonctionne car je les codez comme ceci dans un autre scripte et sa a fonctionnez. Je pense que le résultat mai renvoyer sous forme de tableau. Un stringrepalce remplace des caractères et nom un tableau donc normal que sa ne fonctionne pas. Il faudrait que j’arrive à exploiter le résultat de mes recherches dans la colonne row du _arraydisplay. Comment faire ?
Voici mon code source.
Code : Tout sélectionner
#include<inet.au3>
#include<Array.au3>
$url="http://autoit.fr"
$source=_inetgetsource($url)
$trouve=stringregexp($source,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
_arraydisplay($trouve)
$fichier=fileopen("test2.html",0)
$lecture=fileread($fichier)
$trouve2=stringregexp($lecture,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
_arraydisplay($trouve2)
stringreplace($lecture,$trouve2,$trouve)
fileclose($fichier)
Re: [..] Récupérer une partie du code source de la page web
Posté : ven. 31 déc. 2010 00:54
par bloodwolff
Prend la peine de lire la documentation de _arraydisplay ... et utilise un traducteur au pire si c'est l'anglais qui te nuit à ce point
Re: [..] Récupérer une partie du code source de la page web
Posté : ven. 31 déc. 2010 12:10
par zeshrek
Pourquoi se faire suer avec des arraydisplay alors que tout peut etre géré avec des stringsplit ?
Code : Tout sélectionner
#include<inet.au3>
#include<Array.au3>
$url="http://autoit.fr"
$source=_inetgetsource($url)
$TabSource = StringSplit($source,@LF) ; moi je commencerait par faire un tableau ligne par ligne de ton fichier
for $i = 1 to $TabSource[0] ; ensuite on parse le tableau
$trouve = StringInStr($TabSource[$i],'|EUR" />') ; on cherche la chaine |EUR" />
if $trouve <> 0 Then ; quand on la trouve c'est qu'on a la ligne avec la valeur que tu cherches
$TabTrouve = StringSplit($TabSource[$i],'="') ; donc on fait un tableau de la ligne en découpant a chaque signe égal
$TabTrouve2= Stringsplit($TabTrouve[9],'|') ; on découpe le 9eme troncon (c'est celui qui a ta variable) lui aussi en tableau en découpant au niveau des |
msgbox(1,$TabTrouve2[1],$TabTrouve2[1]) ; et le 1er morceau de ce 9eme troncon est le gagnant !
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
EndIf
Next
Re: [..] Récupérer une partie du code source de la page web
Posté : sam. 01 janv. 2011 14:22
par mystere
Merci de vos réponses, j’ai essayé ce que vous m’ avez dit mais je ne comprend pas pourquoi le stringreplace ne fonctionne pas. J’ai continué à suivre l’exemple de bloodwolff et j’ai réussi a affiché le arraydisplay dans un msgbox. Mais malgré sella le remplacement ne s’effectue pas.
Voici mon code.
► Afficher le texte
Code : Tout sélectionner
#include<inet.au3>
#include<Array.au3>
$url="http://autoit.fr/"
$source=_inetgetsource($url)
$trouve=stringregexp($source,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
msgbox(4096,"test",$trouve[0])
$fichier=fileopen("test2.html",0)
$lecture=fileread($fichier)
$trouve2=stringregexp($lecture,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
msgbox(4096,"test",$trouve2[0])
stringreplace($lecture,$trouve2[0],$trouve[0])
fileclose($fichier)
$fichier=fileopen("test2.html",2)
filewrite($fichier,$lecture)
fileclose($fichier)
J’ai également suivi l’exemple de zeshrek, j’arrive au même résultat que l'éxemple de bloodwolff, mais le remplacement ne s’effectue pas non plus.
Voici mon code.
► Afficher le texte
Code : Tout sélectionner
#include<inet.au3>
#include<Array.au3>
$url="http://autoit.fr"
$source=_inetgetsource($url)
$TabSource = StringSplit($source,@LF) ; moi je commencerait par faire un tableau ligne par ligne de ton fichier
for $i = 1 to $TabSource[0] ; ensuite on parse le tableau
$trouve = StringInStr($TabSource[$i],'|EUR" />') ; on cherche la chaine |EUR" />
if $trouve <> 0 Then ; quand on la trouve c'est qu'on a la ligne avec la valeur que tu cherches
$TabTrouve = StringSplit($TabSource[$i],'="') ; donc on fait un tableau de la ligne en découpant a chaque signe égal
$TabTrouve2= Stringsplit($TabTrouve[9],'|') ; on découpe le 9eme troncon (c'est celui qui a ta variable) lui aussi en tableau en découpant au niveau des |
msgbox(1,$TabTrouve2[1],$TabTrouve2[1]) ; et le 1er morceau de ce 9eme troncon est le gagnant !
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
EndIf
Next
$fichier=fileopen("test2.html",0)
$lecture=fileread($fichier)
$TabSource3 = StringSplit($lecture,@LF) ; moi je commencerait par faire un tableau ligne par ligne de ton fichier
for $i2 = 1 to $TabSource3[0] ; ensuite on parse le tableau
$trouve2 = StringInStr($TabSource3[$i2],'|EUR" />') ; on cherche la chaine |EUR" />
if $trouve2 <> 0 Then ; quand on la trouve c'est qu'on a la ligne avec la valeur que tu cherches
$TabTrouve3 = StringSplit($TabSource3[$i2],'="') ; donc on fait un tableau de la ligne en découpant a chaque signe égal
$TabTrouve4 = Stringsplit($TabTrouve3[9],'|') ; on découpe le 9eme troncon (c'est celui qui a ta variable) lui aussi en tableau en découpant au niveau des |
msgbox(1,$TabTrouve4[1],$TabTrouve4[1]) ; et le 1er morceau de ce 9eme troncon est le gagnant !
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
stringreplace($lecture,$TabTrouve4[1],$TabTrouve2[1])
EndIf
Next
fileclose($fichier)
$fichier=fileopen("test2.html",2)
filewrite($fichier,$lecture)
fileclose($fichier)
Que je mette le stringreplace en dehors de la boucle ou dans la boucle j’obtiens le même résultat.
Dans les 2 exemples je trouve bien les nombres recherché, mais pourquoi le stringreplace ne fonctionne pas ?
Re: [..] Récupérer une partie du code source de la page web
Posté : sam. 01 janv. 2011 15:52
par zeshrek
Est ce que tu as lu le code que je t'ai donné ?
Si j'ai mis des commentaires, et en particulier celui ci :
Code : Tout sélectionner
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
C'est peut etre pour que tu les lises !
Indice : tu mets ici un appel vers une fonction, éventuellement en lui passant en paramètre la valeur trouvée (pour mémoire : $TabTrouve2[1] ) afin qu'elle fasse le stringreplace.
Re: [..] Récupérer une partie du code source de la page web
Posté : sam. 01 janv. 2011 19:51
par mystere
Merci de ta réponse zeshrek, mais je ne comprends pas. J’ai mis la fonction strinreplace la ou ta mis les commentaires, je fais donc appel a la fonction. Le truc c’est que je fais 2 recherches, dans 2 fichiers différant, le premier et le site en question et le seconde une page html a modifier sur le disque dur. Le stringreplace s’effectue dans la page html. J’ai déjà essayé de mètre la deuxième boucle la ou tu as mis les commentaires et si je fais sa, le scripte tourne à l’ infini. J’ai donc dissocié les 2 boucles.
Pour info j’ai bien mis la fonction la ou tu à mis les commentaires dans la 2ieme boucle.
Code : Tout sélectionner
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
stringreplace($lecture,$TabTrouve4[1],$TabTrouve2[1])
EndIf
Next
J’ai même fait un test en placent les msgboxs a la sortie des 2 boucles pour être sur que je ne perdais pas les variables. Et j’obtiens également le bon résultat.
J’ai aussi tester de mètre ceci dans la boucle, mais j’obtiens les mêmes résultats.
Code : Tout sélectionner
fileclose($fichier)
$fichier=fileopen("test2.html",2)
filewrite($fichier,$lecture)
fileclose($fichier)
Je ne comprends pas pourquoi sa ne fonctionne pas.
Re: [..] Récupérer une partie du code source de la page web
Posté : sam. 01 janv. 2011 20:00
par bloodwolff
Test un truc du genre
Code : Tout sélectionner
#include<inet.au3>
$url="http://autoit.fr/"
$source=_inetgetsource($url)
$trouve=stringregexp($source,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
$fichier=fileopen("test2.html")
$lecture=fileread($fichier)
$lecture=StringRegExpReplace($lecture,'value="([[:digit:].]+?)\|\d+?\|EUR" />', $trouve[0])
fileclose($fichier)
$fichier2=fileopen("test2.html",2)
filewrite($fichier2,$lecture)
fileclose($fichier2)
Re: [..] Récupérer une partie du code source de la page web
Posté : sam. 01 janv. 2011 20:31
par zeshrek
Ce dont je te parlais c'était plutot un truc du genre de ce qui suit.
Notes : 1/ j'ai repris ton code pour le mettre dans la fonction, avec juste une petite correction (passage du parametre) donc si ca marche pas je te laisse deviner a qui il faut le reprocher

2/ Si tu donnais l'url de source (ou le fichier htm) ainsi que celui de destination ca serait vachement plus simple, parceque là, on bosse un peu dans le brouillard !
► Afficher le texte
Code : Tout sélectionner
#include<inet.au3>
#include<Array.au3>
$url = "http://autoit.fr"
$source = _INetGetSource($url)
$TabSource = StringSplit($source, @LF) ; moi je commencerait par faire un tableau ligne par ligne de ton fichier
For $i = 1 To $TabSource[0] ; ensuite on parse le tableau
$trouve = StringInStr($TabSource[$i], '|EUR" />') ; on cherche la chaine |EUR" />
If $trouve <> 0 Then ; quand on la trouve c'est qu'on a la ligne avec la valeur que tu cherches
$TabTrouve = StringSplit($TabSource[$i], '="') ; donc on fait un tableau de la ligne en découpant a chaque signe égal
$TabTrouve2 = StringSplit($TabTrouve[9], '|') ; on découpe le 9eme troncon (c'est celui qui a ta variable) lui aussi en tableau en découpant au niveau des |
MsgBox(1, $TabTrouve2[1], $TabTrouve2[1]) ; et le 1er morceau de ce 9eme troncon est le gagnant !
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
[color=#FF0000]_Traitement($TabTrouve2[1]) ; C'est ici que je te disais de faire un appel a une fonction ou tu traites ce qui a été trouvé ![/color]
EndIf
Next
Exit
Func _Traitement($remplacant)
$fichier = FileOpen("test2.html", 0)
$lecture = FileRead($fichier)
$TabSource3 = StringSplit($lecture, @LF) ; moi je commencerait par faire un tableau ligne par ligne de ton fichier
For $i2 = 1 To $TabSource3[0] ; ensuite on parse le tableau
$trouve2 = StringInStr($TabSource3[$i2], '|EUR" />') ; on cherche la chaine |EUR" />
If $trouve2 <> 0 Then ; quand on la trouve c'est qu'on a la ligne avec la valeur que tu cherches
$TabTrouve3 = StringSplit($TabSource3[$i2], '="') ; donc on fait un tableau de la ligne en découpant a chaque signe égal
$TabTrouve4 = StringSplit($TabTrouve3[9], '|') ; on découpe le 9eme troncon (c'est celui qui a ta variable) lui aussi en tableau en découpant au niveau des |
MsgBox(1, $TabTrouve4[1], $TabTrouve4[1]) ; et le 1er morceau de ce 9eme troncon est le gagnant !
; c'est donc là qu'il faut mettre un appel a une fonction si tu veux faire qqchose avec (par ex ton stringreplace
; parceque si il y a plusieurs fois des |EUR" /> dans ton url de source, bin tu n'auras que le dernier en sortie de la boucle
StringReplace($lecture, $TabTrouve4[1], $remplacant)
EndIf
Next
FileClose($fichier)
$fichier = FileOpen("test2.html", 2)
FileWrite($fichier, $lecture)
FileClose($fichier)
EndFunc
Re: [..] Récupérer une partie du code source de la page web
Posté : dim. 02 janv. 2011 13:27
par mystere
Merci de vos réponses, sa fonctionne j’ai suivi l’exemple de bloodwolff, en fessent une petite rectification car si non, le remplacement ne se fessai pas correctement et supprimé des caractères que j’avais besoin. Je mes le code ci-dessous
► Afficher le texte
Code : Tout sélectionner
#include<inet.au3>
$url="http://autoit.fr"
$source=_inetgetsource($url)
$trouve=stringregexp($source,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
msgbox(4096,"test",$trouve[0])
$fichier=fileopen("test2.html")
$lecture=fileread($fichier)
$trouve2=stringregexp($lecture,'value="([[:digit:].]+?)\|\d+?\|EUR" />',3)
msgbox(4096,"test",$trouve2[0])
$lecture=StringRegExpReplace($lecture,$trouve2[0], $trouve[0])
fileclose($fichier)
$fichier2=fileopen("test2.html",2)
filewrite($fichier2,$lecture)
fileclose($fichier2)
Pour l’exemple de zeshrek, je n’ai pas réussi à le mètre en place. Même avec la rectification que tu ma faite plus haut. J’obtiens le même résultat.
Le problème est résolut.
