[R] Récupérer une partie du code source de la page web

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

[R] Récupérer une partie du code source de la page web

#1

Message 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. :wink:
Modifié en dernier par mystere le dim. 02 janv. 2011 13:28, modifié 1 fois.
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#2

Message 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
Modifié en dernier par legend le jeu. 30 déc. 2010 14:03, modifié 2 fois.
Avatar du membre
GELDROC
Niveau 6
Niveau 6
Messages : 295
Enregistré le : sam. 10 oct. 2009 10:15
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#3

Message 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")
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#4

Message 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)
Compte skype : bloodwolfff
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#5

Message 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 :

Code : Tout sélectionner

stringtrimleft($chaine,40)
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

Code : Tout sélectionner

$chaine=stringreplace($chaine," $apres_2010","")
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.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#6

Message 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)
Compte skype : bloodwolfff
Avatar du membre
GELDROC
Niveau 6
Niveau 6
Messages : 295
Enregistré le : sam. 10 oct. 2009 10:15
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#7

Message 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 .
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#8

Message 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. :mrgreen:
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)
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#9

Message 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
Compte skype : bloodwolfff
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#10

Message 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
 
Si vis pacem para bellum
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#11

Message 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
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
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 ?
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#12

Message 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.
Si vis pacem para bellum
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#13

Message 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.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#14

Message 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)
Compte skype : bloodwolfff
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#15

Message 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
Si vis pacem para bellum
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..] Récupérer une partie du code source de la page web

#16

Message 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
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. :)
Répondre