reg34000 Posté(e) le 4 septembre 2006 Partager Posté(e) le 4 septembre 2006 Bonjour je viens de découvrir qu'il est possible de parse des pages internet j'avoue que je suis perdu personne n'aurais un petit coup de pouce a me donner pour récupérer par exemple sur la page les info suivantes : Nom de la commune : Lisle-en-Rigault Superficie : 1054 hectares Altitude : 187 mètres et les enregistrer dans un fichier idem pour toutes les communes sachant que je peux avoir la liste des communes (qui est la variable de la regete). Lien vers le commentaire Partager sur d’autres sites More sharing options...
CharlyBrok Posté(e) le 6 septembre 2006 Partager Posté(e) le 6 septembre 2006 Salut, Si c'est un site internet peux tu mettre le lien pour voir comment est construite la page ? Je pense qu'il faut s'appuyer sur les balises de la commune, superficie et altitude... si ça te parait idiot c'est que j'ai rien compris... (ça arrive ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
reg34000 Posté(e) le 12 septembre 2006 Auteur Partager Posté(e) le 12 septembre 2006 Salut je bloque sur un petit script pour traiter le code suivant <table> <tr> <td><h4>Nom de la commune</h4><strong>Lisle-en-Rigault</strong></td> <td><h4>Région</h4><a href="./regions.html?mode=detail®=57" title="fiche de la région">Lorraine</a></td> </tr> </table> <div class="donnees"> <h4>Généralités historiques</h4> <p><ul><li>Occupation préhistorique.</li> </ul></p> <h4>Vestiges préhistoriques et antiques</h4> <p><ul><li>Grottes dans la vallée du Boulou.</li> </ul></p> Avec le script suivant j'arrive a récupérer comme info le "nom de la commune" mais pas les "Vestiges préhistoriques et antiques" $fp = fopen("...", "r");while (!feof($fp)) { $ligne = fgetss($fp, 4096); if ( strstr($ligne,'Nom de la commune')) { $commune = substr(strstr($ligne,'Nom de la commune'),17) ; } if ( strstr($ligne,'Région')) { $region = substr(strstr($ligne,'Région'),6) ; } if ( strstr($ligne,'Vestiges préhistoriques et antiques')) { $vpa = substr(strstr($ligne,'Vestiges préhistoriques et antiques'),36) ; } } je ne comprend pas pourquoi cela fonctionne pour le nom de la commune et la région et non pour le reste ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 septembre 2006 Partager Posté(e) le 12 septembre 2006 Tu as déja des parsers HTML tout fait en php http://php-html.sourceforge.net/ http://www.phpit.net/code/html-parser-class/ Je ne sais pas ce que ça vaut par contre. Lien vers le commentaire Partager sur d’autres sites More sharing options...
reg34000 Posté(e) le 12 septembre 2006 Auteur Partager Posté(e) le 12 septembre 2006 ok merci donc voici le script les explication sont en anglais serait il possible de commenter et expliquer le script Quae faut il paramettrer modifier ? <?php /** * HTML/XML Parser Class * * This is a helper class that is used to parse HTML and XML. A unique feature of this parsing class * is the fact that it includes support for innerHTML (which isn't easy to do). * * @author Dennis Pallett * @copyright Dennis Pallett 2006 * @package HTML_Parser * @version 1.0 */ // Helper Class // To parse HTML/XML Class HTML_Parser { // Private properties var $_parser; var $_tags = array(); var $_html; var $output = array(); var $strXmlData; var $_level = 0; var $_outline; var $_tagcount = array(); var $xml_error = false; var $xml_error_code; var $xml_error_string; var $xml_error_line_number; function get_html () { return $this->_html; } function parse($strInputXML) { $this->output = array(); // Translate entities $strInputXML = $this->translate_entities($strInputXML); $this->_parser = xml_parser_create (); xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, true); xml_set_object($this->_parser,$this); xml_set_element_handler($this->_parser, "tagOpen", "tagClosed"); xml_set_character_data_handler($this->_parser, "tagData"); $this->strXmlData = xml_parse($this->_parser,$strInputXML ); if (!$this->strXmlData) { $this->xml_error = true; $this->xml_error_code = xml_get_error_code($this->_parser); $this->xml_error_string = xml_error_string(xml_get_error_code($this->_parser)); $this->xml_error_line_number = xml_get_current_line_number($this->_parser); return false; } return $this->output; } function tagOpen($parser, $name, $attr) { // Increase level $this->_level++; // Create tag: $newtag = $this->create_tag($name, $attr); // Build tag $tag = array("name"=>$name,"attr"=>$attr, "level"=>$this->_level); // Add tag array_push ($this->output, $tag); // Add tag to this level $this->_tags[$this->_level] = $tag; // Add to HTML $this->_html .= $newtag; // Add to outline $this->_outline .= $this->_level . $newtag; } function create_tag ($name, $attr) { // Create tag: # Begin with name $tag = '<' . strtolower($name) . ' '; # Create attribute list foreach ($attr as $key=>$val) { $tag .= strtolower($key) . '="' . htmlentities($val) . '" '; } # Finish tag $tag = trim($tag); switch(strtolower($name)) { case 'br': case 'input': $tag .= ' /'; break; } $tag .= '>'; return $tag; } function tagData($parser, $tagData) { if(trim($tagData)) { if(isset($this->output[count($this->output)-1]['tagData'])) { $this->output[count($this->output)-1]['tagData'] .= $tagData; } else { $this->output[count($this->output)-1]['tagData'] = $tagData; } } $this->_html .= htmlentities($tagData); $this->_outline .= htmlentities($tagData); } function tagClosed($parser, $name) { // Add to HTML and outline switch (strtolower($name)) { case 'br': case 'input': break; default: $this->_outline .= $this->_level . '</' . strtolower($name) . '>'; $this->_html .= '</' . strtolower($name) . '>'; } // Get tag that belongs to this end $tag = $this->_tags[$this->_level]; $tag = $this->create_tag($tag['name'], $tag['attr']); // Try to get innerHTML $regex = '%' . preg_quote($this->_level . $tag, '%') . '(.*?)' . preg_quote($this->_level . '</' . strtolower($name) . '>', '%') . '%is'; preg_match ($regex, $this->_outline, $matches); // Get innerHTML if (isset($matches['1'])) { $innerhtml = $matches['1']; } // Remove level identifiers $this->_outline = str_replace($this->_level . $tag, $tag, $this->_outline); $this->_outline = str_replace($this->_level . '</' . strtolower($name) . '>', '</' . strtolower($name) . '>', $this->_outline); // Add innerHTML if (isset($innerhtml)) { $this->output[count($this->output)-1]['innerhtml'] = $innerhtml; } // Fix tree $this->output[count($this->output)-2]['children'][] = $this->output[count($this->output)-1]; array_pop($this->output); // Decrease level $this->_level--; } function translate_entities($xmlSource, $reverse =FALSE) { static $literal2NumericEntity; if (empty($literal2NumericEntity)) { $transTbl = get_html_translation_table(HTML_ENTITIES); foreach ($transTbl as $char => $entity) { if (strpos('&"<>', $char) !== FALSE) continue; $literal2NumericEntity[$entity] = ''.ord($char).';'; } } if ($reverse) { return strtr($xmlSource, array_flip($literal2NumericEntity)); } else { return strtr($xmlSource, $literal2NumericEntity); } } } // To be used like this $parser = new HTML_Parser; $output = $parser->parse($html); print_r ($output); ?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 septembre 2006 Partager Posté(e) le 12 septembre 2006 serait il possible de commenter et expliquer le scriptQuae faut il paramettrer modifier ? [...] // À utiliser comme ça $parser = new HTML_Parser; $output = $parser->parse($html); print_r ($output); ?> Le print_r affichera tout ce que contient la variable $output.La variable $html à passer semble être un tableau représentant le contenu de la page en question. Lien vers le commentaire Partager sur d’autres sites More sharing options...
reg34000 Posté(e) le 12 septembre 2006 Auteur Partager Posté(e) le 12 septembre 2006 je je veux parser la page www.machin.com je fait quoi j'ai pas bien compris Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 septembre 2006 Partager Posté(e) le 12 septembre 2006 $fp = fopen("www.machin.com", "r"); while (!feof($fp)) { $ligne = fgetss($fp, 4096); $parser = new HTML_Parser; $output = $parser->parse($html); print_r ($output); Lien vers le commentaire Partager sur d’autres sites More sharing options...
reg34000 Posté(e) le 12 septembre 2006 Auteur Partager Posté(e) le 12 septembre 2006 il me marque Parse error: syntax error, unexpected $end in /index.php on line 195 c'est a dire a cette ligne : ?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
tsubasaleguedin Posté(e) le 12 septembre 2006 Partager Posté(e) le 12 septembre 2006 il me marque Parse error: syntax error, unexpected $end in /index.php on line 195 c'est a dire a cette ligne : ?> ; ou ( ou ) ou { ou } ou [ ou ] qui manque quelque part ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 septembre 2006 Partager Posté(e) le 12 septembre 2006 Ferme le while. Tu as des notions de programmation quand même ? Tu as un éditeur qui fait de la coloratrion syntaxique ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.