Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs Scripts PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 04/07/2006, 17h17   #1
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut [PHP] Parser d'une page HTML pour récupération du texte

Bonjour,

Je souhaiterais à partir d'un fichier HTML, extraire tout le texte qui existe sur la page. Est-ce qu il y a des algos, des fonctions que vous me conseillez pour faire cela?

A titre d'exemeple, si j'ai :
Code :
 
<head>
<title> mon site </title></head>
<body> ok </body>
 
Et après, mettre dans un fichier :
mon site
ok

Je pensais essayer de détecter tous les textes entre "> < ". Est-ce une bonne idée?
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/07/2006, 17h30   #2
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

Il semblerait que la meilleure solution soit d'utiliser les expressions régulières avec preg_match?

Quelqu'un peut me confirmer ca? faut que je regarde cmt s'utilise cette fonction
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/07/2006, 17h54   #3
Membre éprouvé
 
Date d'inscription: janvier 2004
Localisation: Paris
Âge: 37
Messages: 402
Par défaut

Sinon, tu as tidy, si l'extension est installée sur ton serveur :

http://fr2.php.net/manual/fr/function.tidy-get-body.php
zevince est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/07/2006, 18h09   #4
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

Non elle ne l'est pas

J'ai une question sur l'utilisation des expression regulières la...
Code :
 
$filehandle=fopen('index.html','r');
 
while(!feof($filehandle))
{
  $line.=fgets($filehandle, 500); // Max 500 chars
 
}
  $titre = eregi("<title>(.*)</title>",$line,$regs);
 
echo $regs[0];
 
Je pensais que ca le résultat allait être le contenu du titre sans les balises mais ce n'est pas le cas.. comment on peut récupérer juste ce qu il y a entre les balises<title> et </title> avec une expression régulière?

merci
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 10h03   #5
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

Bonjour,

mmm j'ai du mal avec les expressions régulières :s

Code :
 
<META NAME="description" CONTENT="Publicit&eacute; on line, Bases de donn&eacute;es, commerce &eacute;lectronique ? Adverland : un interlocuteur unique pour mon&eacute;tiser votre audience">
<META NAME="keywords"  CONTENT="r&eacute;seau,publicit&eacute;,campagne publicitaire,CPM,campagnes,annonceur,annonceurs,editeurs,&eacute;diteurs, publicitaires,rentabilisez,rentabiliser,rentabilise,publicit&eacute; on line,bases de donn&eacute;es,commerce &eacute;lectronique,audience,r&eacute;gie, online,publicite, marketing,emailing,e-mailing, wap, banniere,bannière,affiliation,reseau,regie,CB ,carte bleue,sms,sms+,wh,w-ha,audiotel,micropaiement">
<META NAME="classification"  CONTENT="REGIE PUBLICITAIRE,MARKETING,COMMERCE ELECTRONIQUE,AFFILIATION">
 
je souhaiterais récupérer ce qu'il y a après le content, entre les guillemets
j'ai donc essayé :
Code :
eregi("<META NAME=\"description\"(.*)CONTENT=\"(.*)>(\n\r)$",$line,$metadesc);
pour description par exemple mais marche pas tres bien

Si je retire le \n\r$ je récupère plus d'une ligne :s

Je continue de regarder mais si quelqu'un peut m'aider

Merci
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 11h26   #6
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

J'ai plus ou moins résolu le problème des metas en supposant qu'une page est bien écrite c'est à dire que c'est de la forme
Code :
 
<Meta name = ...>
<Meta Name = >
 
Mon problème vient maintenant du texte dans le body... Ce que je faisais pour les métas, c'est de tester en lisant le fichier avec file() mais la je ne pourrai pas dans le body...

Je suis, il me semble, obligé de garder tout ce qu il y a entre <body> et </body>

Ensuite, j'aurai bien voulu, dans un premier temps, repéré ce qui se trouve entre <td...>texte</td>

J'ai donc fait :
Code :
eregi("<td(.*)>(.*)(</td>?)",$text,$regtext);
 
Je voulais qu'il me récupère que la première fermeture du td... Or la, je récupère tout jusqu au dernier </td> de ma page... Je me suis trompé qq part dans l'expression je suppose

Merci!
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 12h47   #7
Rédacteur
 
Avatar de Maxoo
 
Date d'inscription: novembre 2004
Localisation: Nantes
Âge: 26
Messages: 2 165
Par défaut

Code :
preg_match_all("#<td[^>]*>(.*)</td>#Ui",$texte,$resultat);
Voila !! il vaut mieux utiliser les PCRE (donc preg_) que les ereg_
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 15h02   #8
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

Merci

J'ai changé mon fusil d'épaule entre temps en fait

Je vais récupérer tout ce qu il y a entre les '>' et '<'
Code :
 
/* if(preg_match_all('|>[^<]+<|i',$text,$matches))*/
 
qui se trouve entre <body> et </body>
mais bon j'ai l'impression que j'ai un petit prob :d
Code :
if(preg_match_all('|<body[^>]*>[^</body>]*</body>|i',$text,$matches));
 
 
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 15h18   #9
Rédacteur
 
Avatar de Maxoo
 
Date d'inscription: novembre 2004
Localisation: Nantes
Âge: 26
Messages: 2 165
Par défaut

Code :
preg_match_all('#<body[^>]*>.*</body>#i',$text,$matches);
 
le ^ c est pour un seul caractere. et sinon je sais pas si c est super a utiliser dans un if.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 15h38   #10
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

oui c'est vrai que le if pas tres utile pour le moment

Merci pour le ^

Question... Ca existe un preg_match_all insensible à la casse? Parce que je suppose que si un site mais <BODY> a la place de <body> mon script va pas apprécié :s
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 15h57   #11
Rédacteur
 
Avatar de Maxoo
 
Date d'inscription: novembre 2004
Localisation: Nantes
Âge: 26
Messages: 2 165
Par défaut

Code :
#i
ca donne insensible à la casse ...

et sinon pour connaitre les autres : http://fr.php.net/manual/fr/referenc....modifiers.php

Voila !!
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 16h17   #12
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

Merci

Heu ... mm comment dire, petit soucis ... je récupère beaucoup trop d'espace .

c'est à dire que j'ai des choses comme :

mon texte texte2

il y a une fonction qui supprime les espaces en trop ? ou je dois l écrire moi meme :s
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 16h19   #13
Rédacteur
 
Avatar de Maxoo
 
Date d'inscription: novembre 2004
Localisation: Nantes
Âge: 26
Messages: 2 165
Par défaut

trim()
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/07/2006, 16h23   #14
Membre éclairé
 
Date d'inscription: février 2006
Messages: 389
Par défaut

Merci maître Maxoo
trihanhcie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2006, 10h37   #15
Membre régulier
 
Avatar de ikeaboy
 
Date d'inscription: novembre 2004
Localisation: Lorraine/Luxembourg
Âge: 26
Messages: 114
Par défaut

Citation:
Envoyé par Maxoo
Code :
preg_match_all('#<body[^>]*>.*</body>#i',$text,$matches);
 
le ^ c est pour un seul caractere. et sinon je sais pas si c est super a utiliser dans un if.
Bonjour,

Ici $text représente quoi? c'est bien le chemin du fichier non?

Faut il encore utiliser le code d'ouverture la ?

Code :
 
$filehandle=fopen('index.html','r');
 
while(!feof($filehandle))
{
  $line.=fgets($filehandle, 500); // Max 500 chars
 
}
  $titre = eregi("<title>(.*)</title>",$line,$regs);
 
echo $regs[0];
 
Merci pour les renseignements
ikeaboy est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2006, 10h59   #16
Rédacteur
 
Avatar de Maxoo
 
Date d'inscription: novembre 2004
Localisation: Nantes
Âge: 26
Messages: 2 165
Par défaut

Bien sur il faut que tu ouvres quand meme ton fichier,
tu récuperes tout dans $line, tu passes le regexp sur $line, et apres tu vois dans $matches ou se cachent les bon résultats ...

Code :
$filehandle=fopen('index.html','r');
$line = "";

while(!feof($filehandle))
{
  $line.=fgets($filehandle, 500); // Max 500 chars

}

preg_match_all('#<body[^>]*>.*</body>#i',$line,$matches);

print_r($matches);;
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2006, 11h11   #17
Membre régulier
 
Avatar de ikeaboy
 
Date d'inscription: novembre 2004
Localisation: Lorraine/Luxembourg
Âge: 26
Messages: 114
Par défaut

oui en effet ca fonctionne bien
Code :
 
//Ouverture du fichier
						$line="";	
						$filehandle=fopen($filename,'r');
 
								while(!feof($filehandle))
								{
  									$line.=fgets($filehandle,500); // Max 500 chars
 
								}
 					
						
						preg_match_all('#<span[^>]*>.*</span>#i',$line,$matches);
						
							foreach ($matches as $val){
								echo $val[0]."<br/>";
								echo $val[1]."<br/>";
								echo $val[2]."<br/>";
								echo $val[3]."<br/>";
								echo $val[4]."<br/>";
							}
J'ai ajouté l'inisalisation de $line

EDIT : je n avais pas vu ton message je corrige mon initialisation

EDIT2 : très pratique le print_r on voit la position dans le tableau c'est très pratique

Merci
ikeaboy est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2006, 11h34   #18
Rédacteur
 
Avatar de Maxoo
 
Date d'inscription: novembre 2004
Localisation: Nantes
Âge: 26
Messages: 2 165
Par défaut

sujet résolu ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/08/2006, 13h35   #19
Membre régulier
 
Avatar de ikeaboy
 
Date d'inscription: novembre 2004
Localisation: Lorraine/Luxembourg
Âge: 26
Messages: 114
Par défaut

Oui résolu merci

Désolè j avais oublié
ikeaboy est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > Scripts



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 10h24.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.