IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Récupérer données code source


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 13
    Par défaut Récupérer données code source
    Bonjour à tous,
    je travail actuellement sur des bilans d'entreprises du site bilansgratuits.com, et j'aimerais pouvoir récupérer les données du bilan et du compte de résultat dans une base de données access. J'ai récupérer un code d'un ami qui me permet de récupérer certaines données, (nom de l'entreprise, adresse…) mais j'ai un problème quand je veux récupérer les données du tableau à savoir les informations vraiment utiles a l'analyse financière. En effet, je n'arrive pas à me repérer avec les balises <TD>.
    En gros j'ai une fonction StrGetbal qui retourne la chaine de caractère comprise entre deux balises.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    function  strGetBal (Chaine, balDeb, balFin, Cond,debug,balDebPar,balFinPar)
    {
        var i,P,PP,LgF,lgD,j,VP;
        var Resu=new Array(),strRes;
    	if (!Chaine) return "";
     
    	if (debug && Cond=="!!") Cond=null;
        P=0;
        strRes='';
        LgF=balFin.length;
        LgD=balDeb.length;
        if(!balDebPar) switch(balDeb.substring(0,1)) {
    	    case '(' :
    		    balDebPar='(';
    		    balFinPar=')';
    		    break;
    	    case '{':
    		    balDebPar='{';
    		    balFinPar='}';
    		    break;
    		case '<':
    			if (balDeb.length>1) {
    				balDebPar=balDeb.split(" ")[0]; //if(balDeb.substring(balDeb.length-1,balDeb.length)!='>') 
    				//else balDebPar=balDeb;
    				balFinPar=balFin;
    			} else {
    				balDebPar='<';
    				balFinPar='>';
    			}
    		    break;
    	    default :
    	        balDebPar=balDeb;
    	        balFinPar=balFin;
    	    break;
        }
        // les chaines ont toujours une egalite en HTML
        //Chaine=Balise
        i=0;
        if (debug) stderr.WriteLine("GetBal "+balDeb+" "+balFin+" :"+balDebPar+balFinPar);
     
        while(P>=0) {
    	    P=Chaine.indexOf(balDeb,P);
    	    PP=Chaine.indexOf(balFin,P+LgD);
    	    if (debug) stderr.WriteLine('P='+P+' PP='+PP+' LgD='+LgD);
    	    if(PP>=0 && P>=0) { 
    	        //if(LgD>1 && balFinPar!=balDeb.substring(balDeb.length,1)) ;
    		    if (PP - P - LgD >= 0) {
    			    VP=Chaine.indexOf(balDebPar,P+LgD);
    			    if (debug) stderr.WriteLine('VP='+VP+'|'+balDebPar+'|'+' PP='+PP);
    			    while (VP >=0 && VP<PP) {
    			        if (debug) stderr.WriteLine('VP='+VP+' PP='+PP);
    				    PP=Chaine.indexOf(balFinPar,PP+LgF);	
    				    VP=Chaine.indexOf(balDebPar,VP+LgD);
    			    }
    			    if (PP - P - LgD >= 0){
    					var bal=Chaine.substring(P+LgD,PP+1)
     
    					if (!Cond || (Cond.substring(0,1)!='!' && bal.indexOf(Cond)>=0) || (Cond.substring(0,1)=='!' && bal.indexOf(Cond.substring(1))<0)) {		
    						Resu[i]=Chaine.substring(P+LgD,PP);
    						if (debug) stderr.WriteLine('Bal ='+Resu[i]+'...');
    						i++;
    					} else if (debug) stderr.WriteLine("Bal trouve mais non retenu sur critere "+Cond);
    			    }
    		    }
    	   	    P+=(PP - P);
    	    } else {
    		    P=-1 ;
    	    }	
        }
     
        Chaine=""
     
    	strRes=Resu.join('{s}');
        // for(j=0;j<i;j++) {
    	    // strRes+=Resu[j];
    	    // if (j!=i-1)  strRes+="{s}";//+String.fromCharCode(13)+String.fromCharCode(10)+String.fromCharCode(13)+String.fromCharCode(10);
        // }
    	if (debug) stderr.WriteLine(strRes+ " "+Resu.length);
        return strRes;	
    }
    cette fonction me récupère bien les données comprises entre des balises. Je peux imbriquer la fonction quand il ya des balises similaires.
    Par contre c'est pour récupérer les données d'un tableau que je ne sais pas comment l'utiliser.

    Par exemple le bilan de cette entreprise:
    http://www.bilansgratuits.fr/entrepr...0939800019.htm

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div class="container_bilans">
    <div>
    		<h2 class="titleBI accroche">Bilan Actif</h2>
    		<table cellspacing="0" class="container_tableIF sautdepage">
    			<thead>
    				<tr><th class='tableTd13'></th><th>2012<br/>(en Euros)</th><th>2011<br/>(en Euros)</th><th>2010<br/>(en Euros)</th><th>Variation<br/>2012/2011<br/>(en %)</th><th class=''>Variation<br/>2012/2010<br/>(en %)</th></tr></thead>
    			<tbody class="rightElement">
    				<tr class='titreIF '><td class="leftElement">Actif immobilisé net</td><td>663</td><td>0</td><td>0</td><td class='colorGreen'>NS</td><td class='colorGreen'>NS</td></tr><tr><td class="leftElement">Immos incorporelles</td><td>0</td><td>0</td><td>0</td><td class='colorGreen'>NS</td><td class='colorGreen'>NS</td></tr><tr class=''><td class="leftElement">Immos corporelles</td><td>663</td><td>0</td><td>0</td><td class='colorGreen'>NS</td><td class='colorGreen'>NS</td></tr><tr><td class="leftElement">Immos financières</td><td>0</td><td>0</td><td>0</td><td class='colorGreen'>NS</td><td class='colorGreen'>NS</td></tr><tr class='titreIF '><td class="leftElement">Actif circulant net</td><td>15 277</td><td>12 319</td><td>16 760</td><td class='colorGreen'>24,01</td><td class='colorRed'>-8,85</td></tr><tr><td class="leftElement">Stocks et en-cours nets</td><td>0</td><td>0</td><td>0</td><td class='colorGreen'>NS</td><td class='colorGreen'>NS</td></tr><tr class=''><td class="leftElement">Avances et acomptes nets</td><td>0</td><td>0</td><td>0</td><td class='colorGreen'>NS</td><td class='colorGreen'>NS</td></tr><tr><td class="leftElement">Créances nettes</td><td>3 898</td><td>3 394</td><td>3 130</td><td class='colorGreen'>14,85</td><td class='colorGreen'>24,54</td></tr><tr class=''><td class="leftElement">Placement et disponibilités</td><td>11 379</td><td>8 925</td><td>13 630</td><td class='colorGreen'>27,50</td><td class='colorRed'>-16,52</td></tr><tr class='titreIF '><td class="leftElement">TOTAL ACTIF</td><td>15 939</td><td>12 319</td><td>16 760</td><td class='colorGreen'>29,39</td><td class='colorRed'>-4,90</td></tr></tbody>
    		</table>
    	</div>

    Par exemple, si je veux récupérer la valeur 663 dans une variable, je ne vois pas comment faire car il y a pleins de balises <td></td>.

    SI vous avez une idée ou une méthode pour résoudre mon problème je suis preneur.

    Cdlt

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bon, si le document n'est pas prévu pour laisser des traces afin qu'on puisse identifier les données en JavaScript, il faut ruser un peu. Là, ce qui me vient comme idée, ce serait de se baser sur le texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [].filter.call(document.getElementsByTagName("td"), function(td){
    return td.textContent == "Actif immobilisé net";
    })[0].nextSibling.textContent;
    Mais bon, j'ai conscience que ce n'est pas l'idéal. Ils ne fourniraient pas une belle API JSON ces messieurs de bilansgratuits.com par hasard ?

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 13
    Par défaut
    Bonsoir, merci à vous pour vos réponses.
    Alors je précise que je souhaite pouvoir récupérer le bilan de plusieurs entreprises, celle que j'ai donnée c'est juste un exemple.
    Dans mon cas je ne veux pas récupérer du texte mais uniquement les valeurs du tableau dans des variables. Et vu que je ne sais pas trop comment fonctionne le principe des balises <td> je suis un peu paumé...

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    le contenu est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <thead>
    <tr>
    <th class="tableTd13"></th>
    <th>2012<br>(en Euros)</th>
    <th>2011<br>(en Euros)</th>
    <th>2010<br>(en Euros)</th>
    <th>Variation<br>2012/2011<br>(en %)</th>
    <th class="">Variation<br>2012/2010<br>(en %)</th>
    </tr>
    </thead>
     
    <tbody class="rightElement">
    <tr class="titreIF ">
    <td class="leftElement">Actif immobilisé net</td>       
    <td>663</td>       
    <td>0</td>       
    <td>0</td>       
    <td class="colorGreen">NS</td>       
    <td class="colorGreen">NS</td>     
    </tr>     
    <tr>       
    <td class="leftElement">Immos incorporelles</td>       
    <td>0</td>       
    <td>0</td>       
    <td>0</td>       
    <td class="colorGreen">NS</td>       
    <td class="colorGreen">NS</td>     </tr>   
    </tbody> 
    </table>
    il est tout de même simple de comprendre en voyant ça qu'une table contient un header et un body
    le body est fait de lignes qui contiennent des cellules.
    don en parcourant l'arbre DOM il n'y a rien de plus simple pour récupérer un tableau
    l'ago étant pour toute les lignes du tbody ajouter une ligne au résultat
    pour chaque cellule de la lignes ajouter le texte de la cellule dans la ligne du résultat.

    je ne sais pas ce qu'est ce bric à brac qui manipule des chaines. le DOM c'est pas un source HTML. le navigateur nativement construit le DOM il suffit de le parcourir.

    A+JYT

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Citation Envoyé par arthur1104 Voir le message
    Dans mon cas je ne veux pas récupérer du texte mais uniquement les valeurs du tableau dans des variables. Et vu que je ne sais pas trop comment fonctionne le principe des balises <td> je suis un peu paumé...
    Tu as essayé de comprendre le code que je t'ai donné ? Il se base sur le texte "Actif immobilisé" pour se caler sur une cellule, et ensuite tu peux récupérer les valeurs des cellules qui suivent. Le tout est d'avoir un repère.

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 13
    Par défaut
    Encore merci pour vos réponses, je vous montre ce que j'ai fait jusqu'à présent.
    Voici comment je récupère les valeurs de la page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function Ana_Fiche_BG_Ent(Siret) {
        var maPage = openURL("http://www.bilansgratuits.fr/entreprise/bilans/" + Siret + ".htm", true);
     
        var Nom_Ent = strGetBal(maPage, '<h1 class="accroche">', '</h1>');
        var Nom_Ent = Nom_Ent.replace("'", " ");
        stdout.WriteLine('Nom Entreprise =' + Nom_Ent);
     
        var Adresse = strGetBal(maPage, '<p class="adresse">', '<br />');
        var Ville = strGetBal(strGetBal(maPage, '<p class="adresse">', '<p class="siret">'), '<br />', '</p>');
        var Ville = Ville.replace("'", " ");
        stdout.WriteLine('Ville Entreprise =' + Adresse + " " + Ville);
     
     
        var Act_Immo_Net = …..
        var immo_incorp =…
        ...
    SQLExec("insert into Societes(Nom_ent , Adresse, ville, Act_immo_net, Immo_incorp,...) values ('" + Nom_ent + "','" + Adresse + "',"' + ville + "','" + Act_immo_net + "','" + Immo_incorp,…"')");
    }
    SylvainPV: Oui j'ai essayé de comprendre ton code, malheureusement, je ne connais pas bien ce langage, c'est la première fois que je l'utilise. ça serait top si tu me montrais un exemple pour une variable que je pourrais adapter ensuite à toute les différentes actifs et passif de mon bilan. Merci par avance.

    Seikajin: Merci de m'avoir affiné la structure du code de manière plus visible. Par contre je suis désolé, mais je ne sais pas ce qu'est le DOM, j'ai regardé sur internet la définition, ça ne me parle pas trop. Quand tu dis "en parcourant l'arbre DOM", tu fais comment concrètement pour parcourir un arbre DOM ?

    Merci d'avance pour vos réponses, et encore désolé de ne pas avoir le niveau requis pour comprendre exactement toute vos réponses.

Discussions similaires

  1. récupérer le code source d'une procédure stockée
    Par mike00 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 13/06/2007, 11h31
  2. Réponses: 1
    Dernier message: 28/02/2007, 11h59
  3. Récupérer le code source d'un fichier créé dynamiquement
    Par jeanvincent dans le forum Langage
    Réponses: 2
    Dernier message: 06/12/2006, 15h09
  4. [Reseau] Récupérer le code source d'une URL
    Par gogolpexe dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 29/06/2005, 14h06
  5. Récupérer le code source d'une page web
    Par glRaZ dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/12/2004, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo