Récupérer contenu DIV

Utilisateur anonyme - Modifié le 8 déc. 2010 à 18:47
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 8 déc. 2010 à 18:47
Bonjour,

J'aimerais récupérer tout le contenu HTML se trouvant dans une balise
sur un site distant.

J'ai donc ce script :



$url = "[http://www.monsite.com/]";
$html = file_get_contents($url);
preg_match('/
(.*?)<\/div>/', $html, $matches);
print_r($matches);



Seulement il ne me retourne aucun résultat. Pourtant dans le site que j'appel, il y a bien
test
.

Si je fais
preg_match('/
(.*?)<\/div>/', $html, $matches);

pour qu'il me retourne toutes les div de mon site, il ne m'en retourne que deux, sur une centaine...

Avez-vous une idée ?

Merci,

A++

2 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 déc. 2010 à 18:38
Salut,

Dans ton masque : (.*?)
Je comprends pas l'intérêt du point d'interrogation...

Tu pourrais poster un bout de code HTML qui devrait satisfaire le masque et qui ne fonctionne pas ? (j'ai une flemme d'en faire un, tu peux pas imaginer ! surtout, j'aimerais tester avec le même code HTML que toi... ou alors carrément l'URL, en mp si tu préfères)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 déc. 2010 à 18:47
Ca y est, ça vient de me revenir.

T'as oublié l'option s qui permet au . de matcher aussi le caractère \n. Par défaut, les correspondances ne cherchent que sur la ligne courante (la première donc).

Y'a quand même un défaut... Par exemple, dans cette page :

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Bidule</title>
</head>















<li>[/ Home]</li>
<li>Upload</li>











© 2010 · bidule.com

<li>Legal</li>
<li>About</li>






L'expression régulière :
preg_match('`
(.*)
`s', $html, $matches);

Va récupérer le code HTML entre
et LE DERNIER
trouvé. C'est pas ça que tu veux... Il faudrait alors utiliser l'option U, pour que la PCRE ne soit pas gourmande... :
preg_match('`
(.*)
`sU', $html, $matches);

Mais là, elle va s'arrêter au PREMIER
, qui, dans mon exemple, est celui du div banner... C'est pas ça non plus que tu veux...
Si tu SAIS que le code HTML ne contient AUCUN autre div dans le header, alors ça ira (avec sU). Sinon, t'es obligé de parser le code de la page pour trouver le bon
(ligne par ligne, ou plutôt div par div).

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
Rejoignez-nous