[PHP5] Parser un document html
canarder
Messages postés
1714
Date d'inscription
Statut
Membre
Dernière intervention
-
canarder Messages postés 1714 Date d'inscription Statut Membre Dernière intervention -
canarder Messages postés 1714 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai essayé de parser un document html comme un document xml avec la méthode suivante :
Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).
Ici j'essaye de parser la page d'une vidéo de YouTube :
Pastebin des erreurs
Mon code :
Il me semble qu'il y avait quelque chose de spécial pour l'html mais je ne sais plus où j'ai vu ça.
Merci pour votre aide.
J'ai essayé de parser un document html comme un document xml avec la méthode suivante :
$xml = "http://site.com/xml.php"; $dom = new DOMDocument(); $dom->load($xml);
Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).
Ici j'essaye de parser la page d'une vidéo de YouTube :
Pastebin des erreurs
Mon code :
<?php $video = isset($_GET['v']) ? $_GET['v'] : "kvDMlk3kSYg"; $xml = "https://www.youtube.com/".$video; $dom = new DOMDocument(); $dom->load($xml); $meta = $dom->getElementsByTagName("meta"); foreach ($meta as $title){ if($title->getAttribute("name")=="title"){ $title = $title->getAttribute("content"); break; } } ?>
Il me semble qu'il y avait quelque chose de spécial pour l'html mais je ne sais plus où j'ai vu ça.
Merci pour votre aide.
A voir également:
- [PHP5] Parser un document html
- Comment reduire la taille d'un document - Guide
- Signer un document word - Guide
- Editeur html - Télécharger - HTML
- Comment récupérer un document dans le presse-papier samsung - Guide
- Comment ouvrir un document docx - Guide
5 réponses
J'ai toujours l'impression que le php xml n'est pas vraiment facilement aidable quand je suis sûr ce forum. je vais essayer sur un autre (developpez) pour ces questions... demain.
Bonjour,
parser un document html comme un document xml
Dès cette phrase tu donne déjà l'explication de ton problème.
Un document html n'est pas un document xml. Pourquoi utilises-tu une méthode qui n'êst pas adaptée pour t'étonner ensuite que cela ne fonctionne pas ?
La seule exception concerne les document XHTML qui peuvent être taités comme du XML. Mais encore faut-il être sûr que ton document soit du XHTML valide.
Tout ceci est d'autant plus étrange que l'objet DOMDOcument te fournit des méthodes telles que loadHTML ou loadHTMLFile qui te permettent de traiter du html.
plus d'infos --> https://www.php.net/manual/fr/class.domdocument.php
Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).
--> Ben justement. Voir point précédent.
parser un document html comme un document xml
Dès cette phrase tu donne déjà l'explication de ton problème.
Un document html n'est pas un document xml. Pourquoi utilises-tu une méthode qui n'êst pas adaptée pour t'étonner ensuite que cela ne fonctionne pas ?
La seule exception concerne les document XHTML qui peuvent être taités comme du XML. Mais encore faut-il être sûr que ton document soit du XHTML valide.
Tout ceci est d'autant plus étrange que l'objet DOMDOcument te fournit des méthodes telles que loadHTML ou loadHTMLFile qui te permettent de traiter du html.
plus d'infos --> https://www.php.net/manual/fr/class.domdocument.php
Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).
--> Ben justement. Voir point précédent.
oui j'avais déjà vu quelque part. merci je vais tester et je mettrais la méthode (si elle change).
arf wamp démarre pas des fois c'est bizarre ....
arf wamp démarre pas des fois c'est bizarre ....
Bonjour,
Il y a plusieurs pistes possibles, mais je ne les ai pas expérimenté.
1) la piste Tidy, c'est un outil qui valide le code HTML et il existe une extension PHP:
https://www.php.net/manual/fr/book.tidy.php
2) la piste Google CHROME
CHROME est le navigateur de Google. Il est possible d'accéder au DOM d'une page HTML - mais pas en PHP -. Google CHROME remet en forme certains éléments non conformes à XML.
Par exemple, si vous faites
Chrome va reformater le code dans son environnement:
CHROME intègre un analyseur de document HTMKL similaire à Firebug qui montre le code corrigé.
Je pense - mais à confirmer - qu'il doit être possible de récupérer ce code corrigé pour analyse. Et ce code HTML passera sans encombre une analyse XML.
Cdlt
Il y a plusieurs pistes possibles, mais je ne les ai pas expérimenté.
1) la piste Tidy, c'est un outil qui valide le code HTML et il existe une extension PHP:
https://www.php.net/manual/fr/book.tidy.php
2) la piste Google CHROME
CHROME est le navigateur de Google. Il est possible d'accéder au DOM d'une page HTML - mais pas en PHP -. Google CHROME remet en forme certains éléments non conformes à XML.
Par exemple, si vous faites
<table><tr><td>test</table>
Chrome va reformater le code dans son environnement:
<table><tr><td>test</td></tr></table>
CHROME intègre un analyseur de document HTMKL similaire à Firebug qui montre le code corrigé.
Je pense - mais à confirmer - qu'il doit être possible de récupérer ce code corrigé pour analyse. Et ce code HTML passera sans encombre une analyse XML.
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
1- Je bosse en PHP.
2- Firebug sur Firefox est mieux que Google Chrome, en plus on peut utiliser Greasemonkey pour modifier l'arbre DOM.
Avec loadHTMLFile, j'ai plein d'erreur. Pourtant mon code fonctionne.
Un petit erreor_reporting(0); ... Sauf que j'aimerais bien régler ces erreurs.
2- Firebug sur Firefox est mieux que Google Chrome, en plus on peut utiliser Greasemonkey pour modifier l'arbre DOM.
Avec loadHTMLFile, j'ai plein d'erreur. Pourtant mon code fonctionne.
Un petit erreor_reporting(0); ... Sauf que j'aimerais bien régler ces erreurs.
<?php $video = isset($_GET['v']) ? $_GET['v'] : "kvDMlk3kSYg"; $html = "https://www.youtube.com/".$video; $dom = new DOMDocument(); $dom->loadHTMLFile($html); $meta = $dom->getElementsByTagName("meta"); foreach ($meta as $title){ if($title->getAttribute("name")=="title"){ $title = $title->getAttribute("content"); break; } } ?> <p> <a href="http://youtu.be/<?php echo $video; ?>"> <img src="http://i.ytimg.com/vi/<?php echo $video; ?>/default.jpg" style="border:0px;text-align:left;" title="<?php echo $title; ?>" alt="Video image" /><br /> <b><?php echo $title; ?></b> </a> </p>