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

Bibliothèques et frameworks PHP Discussion :

[XML] Simple html dom : boucle qui fonctionne une seule fois !


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [XML] Simple html dom : boucle qui fonctionne une seule fois !
    Bonjour,

    J'essaye de récupérer des partie d'un html sur un site, en utilisant un parseur "simple html dom" le problème qui se pose c'est ma boucle qui ne fonctionne qu'une seule fois et je ne retrouve pas ou ça coince !

    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
     
    <?php
    // connexion à la bdd
    $conn = mysql_connect('localhost', 'root', '');
    $db = mysql_select_db('medoc'); 
    ?>
     
     
    <?php 
    // récupérer le numéro cis du medicament depuis une liste de numéro dans un fichier class.csv
     
    $csv = file_get_contents("class.csv");
    require_once 'simple_html_dom.php';
     
    function readCSV($csvFile){
    	$file_handle = fopen($csvFile, 'r');
    	while (!feof($file_handle) ) {
    		$line_of_text[] = fgetcsv($file_handle, 1024);
    	}
    	fclose($file_handle);
    	return $line_of_text;
    }
     
     
    $csvFile = 'class.csv';
     
    $csv = readCSV($csvFile);
     
    // parser l'url jusqu'a 100 fois en utilisant le numéro récupérér et l'injectant dans le lien
     
    $i=0;
    while ($i<100){
     
     
    $rcp = $csv[$i][0];
     
     
     
    	$lien = 'http://agence-prd.ansm.sante.fr/php/ecodex/rcp/R0'.$rcp.'.htm';
    	echo "Traitement du lien: <strong>".$lien."</strong> ... en cours. <br />";
     
     
     
    		$html = new simple_html_dom();
    		$html->load_file(''.$lien.'');
    		foreach($html->find('p[class=AmmDenomination]') as $word)
    		$titre = $word->plaintext;
    		echo "Extraction du titre: <strong>".$titre."</strong><br />";
    		$exe = mysql_query("INSERT INTO rcp (titre) VALUES('$titre')");
    		ob_flush();
            flush();
            sleep(2);
    		echo "<br />Titre du rcp <strong>".$rcp."</strong> ajouté avec succés dans la BDD<br />";
     
    							            $i=$i+1;
    echo "la boucle numero: <strong>".$i."</strong> va commencer <br />";
    flush();
    ob_flush();
    flush();
    ob_flush();
    flush();
    ob_flush();
    			}	
     
     
    ?>
    le Résultat est :

    Traitement du lien: http://agence-prd.ansm.sante.fr/php/...p/R0235297.htm ... en cours.
    Extraction du titre: AGRASTAT 50 microgrammes/ml, solution pour perfusion

    Titre du rcp 235297 ajouté avec succés dans la BDD
    la boucle numero: 1 va commencer
    Traitement du lien: http://agence-prd.ansm.sante.fr/php/...p/R0235296.htm ... en cours.

    Fatal error: Call to a member function find() on a non-object in D:\wamp\www\parse\simple_html_dom.php on line 1113

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Une possibilité probable : loadFile n'arrive pas à charger ton fichier.

    Pour vérifier fait un :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($html->load_file(''.$lien.'');

    A mon avis il faut une adresse locale, relative ou absolue peut importe, mais pas une url.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    merci pour la réponse, j'ai modifier donc avec var_dump :

    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
    <?php
    // connexion à la bdd
    $conn = mysql_connect('localhost', 'root', '');
    $db = mysql_select_db('medoc'); 
    ?>
     
     
    <?php 
    // récupérer le numéro cis du medicament depuis une liste de numéro dans un fichier class.csv
     
    $csv = file_get_contents("class.csv");
    require_once 'simple_html_dom.php';
     
    function readCSV($csvFile){
    	$file_handle = fopen($csvFile, 'r');
    	while (!feof($file_handle) ) {
    		$line_of_text[] = fgetcsv($file_handle, 1024);
    	}
    	fclose($file_handle);
    	return $line_of_text;
    }
     
     
    $csvFile = 'class.csv';
     
    $csv = readCSV($csvFile);
     
    // parser l'url jusqu'a 100 fois en utilisant le numéro récupérér et l'injectant dans le lien
     
    $i=0;
    while ($i<100){
     
     
    $rcp = $csv[$i][0];
     
     
     
    	$lien = 'http://agence-prd.ansm.sante.fr/php/ecodex/rcp/R0'.$rcp.'.htm';
    	echo "Traitement du lien: <strong>".$lien."</strong> ... en cours. <br />";
     
     
     
    		$html = new simple_html_dom();
    		$vu = $html->load_file(''.$lien.'');
    		var_dump($vu);
    		foreach($html->find('p[class=AmmDenomination]') as $word)
    		$titre = $word->plaintext;
    		echo "Extraction du titre: <strong>".$titre."</strong><br />";
    		$exe = mysql_query("INSERT INTO rcp (titre) VALUES('$titre')");
    		ob_flush();
            flush();
            sleep(2);
    		echo "<br />Titre du rcp <strong>".$rcp."</strong> ajouté avec succés dans la BDD<br />";
     
    							            $i=$i+1;
    echo "la boucle numero: <strong>".$i."</strong> va commencer <br />";
    flush();
    ob_flush();
    flush();
    ob_flush();
    flush();
    ob_flush();
    			}	
     
     
    ?>
    maintenant j'ai ce resultat (null - bool(false) )

    Traitement du lien: http://agence-prd.ansm.sante.fr/php/...p/R0235297.htm ... en cours.
    NULL Extraction du titre: AGRASTAT 50 microgrammes/ml, solution pour perfusion

    Titre du rcp 235297 ajouté avec succés dans la BDD
    la boucle numero: 1 va commencer
    Traitement du lien: http://agence-prd.ansm.sante.fr/php/...p/R0235296.htm ... en cours.
    bool(false)
    Fatal error: Call to a member function find() on a non-object in D:\wamp\www\parse\simple_html_dom.php on line 1113

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Donc la fonction n'arrive pas à charger ton fichier.

    Il faut indiquer une adresse locale ( du genre '/ces/czq/czq.html de manière absolue ou ../../ecs.html de manière relative), pas d'url (pas de http://)
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    j'ai aspirer quelques fichiers html en local pour faire ce que vous venez de me recommander, et j'ai changé le code :

    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
    <?php
    // connexion à la bdd
    $conn = mysql_connect('localhost', 'root', '');
    $db = mysql_select_db('medoc'); 
    ?>
     
     
    <?php 
    // récupérer le numéro cis du medicament depuis une liste de numéro dans un fichier class.csv
     
    $csv = file_get_contents("class.csv");
    require_once('D:\wamp\www\parse\simple_html_dom.php');
     
    function readCSV($csvFile){
    	$file_handle = fopen($csvFile, 'r');
    	while (!feof($file_handle) ) {
    		$line_of_text[] = fgetcsv($file_handle, 1024);
    	}
    	fclose($file_handle);
    	return $line_of_text;
    }
     
     
    $csvFile = 'class.csv';
     
    $csv = readCSV($csvFile);
     
    // parser l'url jusqu'a 100 fois en utilisant le numéro récupérér et l'injectant dans le lien
     
    $i=0;
    while ($i<100){
     
     
    $rcp = $csv[$i][0];
     
     
     
    	$lien = ('D:\wamp\www\parse\rcp\r0'.$rcp.'.html');
    	echo "Traitement du lien: <strong>".$lien."</strong> ... en cours. <br />";
     
     
     
    		$html = new simple_html_dom();
    		$html->load_file($lien);
    		var_dump($vu);
    		foreach($html->find('p[class=AmmDenomination]') as $word)
    		$titre = $word->plaintext;
    		echo "Extraction du titre: <strong>".$titre."</strong><br />";
    		$exe = mysql_query("INSERT INTO rcp (titre) VALUES('$titre')");
    		ob_flush();
            flush();
            sleep(2);
    		echo "<br />Titre du rcp <strong>".$rcp."</strong> ajouté avec succés dans la BDD<br />";
     
    							            $i=$i+1;
    echo "la boucle numero: <strong>".$i."</strong> va commencer <br />";
    flush();
    ob_flush();
    flush();
    ob_flush();
    flush();
    ob_flush();
    			}	
     
     
    ?>
    toujours ce résultat :

    Traitement du lien: D:\wamp\www\parse\rcp\r0235297.html ... en cours.
    NULL Extraction du titre: AGRASTAT 50 microgrammes/ml, solution pour perfusion

    Titre du rcp 235297 ajouté avec succés dans la BDD
    la boucle numero: 1 va commencer
    Traitement du lien: D:\wamp\www\parse\rcp\r0235296.html ... en cours.
    NULL
    Fatal error: Call to a member function find() on a non-object in D:\wamp\www\parse\simple_html_dom.php on line 1113
    var_dump retourne deux fois null alors que le fichier existe bien et traiter la première fois uniquement, la seconde boucle s'arrête

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    probleme resolut en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $html = file_get_html($lien);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $html->load_file($lien);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/08/2016, 11h51
  2. Réponses: 10
    Dernier message: 22/09/2015, 08h58
  3. [simple html dom] Parser les premiers blocs d'une source html
    Par Marmotton76 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 21/09/2014, 09h17
  4. parcourir une boucle FOR qu'une seule fois
    Par Globolite dans le forum Langage
    Réponses: 14
    Dernier message: 21/06/2012, 09h32
  5. Parser une page HTML avec Simple html dom parser
    Par thelover2fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/05/2012, 13h26

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