Récupération des balises div

Fermé
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 - 17 nov. 2009 à 10:36
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 - 25 nov. 2009 à 10:02
Bonjour,

J'ai une liste de 1000 pages web , er j'aimerais récupérer le contenu de certaines balises div dont je connais l'id pour ensuite l'afficher sur la page .

Quelle est la meilleur méthode ??

Merci d'avance
A voir également:

26 réponses

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 10:44
bonjour,

c'est plutôt étrange comme requête...

à mon avis ton site est mal structuré !

sinon la seule solution que je vois serait de créer en ajax

créer une div vide avec le style display: none;

aller chercher sur le serveur le contenu de tes pages le mettre dedans avec innerHTML += responseText

et de là aller chercher le contenu des div que tu veux

mais il ne faut pas qu'il y est plusieurs div avec le même id...

ensuite supprimer la div créée au début.

c'est du bricolage un peu étrange quand même...
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
17 nov. 2009 à 10:52
Merci de ta réponse ,


Je pense pas que c'est étrange , c'est a mon avis ce qu'utilise les sites de comparateur de prix ?!


Je peux re formuler si tu le souhaite :

J'ai une liste de 1000 fiche produits :

Pour chaque produit , dans la source il y a ceci :

<div style="position: absolute ;display:none;" id="eiid">1172770093</div>
<div style="position: absolute ;display:none;" id="reflm">64919134</div>
<div style="position: absolute ;display:none;" id="tva">19.6</div>
<div style="position: absolute ;display:none;" id="UnitPriceATA">169.0</div>
<div style="position: absolute ;display:none;" id="Weight">100.0</div>
<div style="position: absolute ;display:none;" id="DeliveryDelay">60</div>
<div style="position: absolute ;display:none;" id="ModeVente">non</div>
<div style="position: absolute ;display:none;" id="CodeBarre">3383720000794</div>
<div style="position: absolute ;display:none;" id="vignette">/multimedia-storage/02/3c/48c4175b2247198c77d271f74b92-photo-a-venir-70.gif</div>
<div style="position: absolute ;display:none;" id="DiscountMention"></div>
<div style="position: absolute ;display:none;" id="TopPickup">0</div>

Moi j'aimerais afficher sur une page que ceux qui est contenu dans les div , sous forme de liste . Sachant que je dispose de tous les liens .


J'aimerais trouver une solution .
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 12:24
utilise plutôt une base de donnée,
ce sera plus souple moins lourd et plus rapide et plus simple

le comparateur de prix utilise forcément une base de donnée.

cette technique n'est pas viable, ça fait ouvrir beaucoup de fichier ca demande énormément de calcul pour pas grand chose au final

renseigne toi sur les bases de données
regarde ça par exemple :
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/913655-quest-ce-quune-base-de-donnees
http://dev.mysql.com/doc/refman/5.0/fr/index.html

il te faut des connaissance en php aussi...
mais bien moins que pour le faire comme tu voulais !
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
17 nov. 2009 à 13:04
Salut Atropa,

Merci de ta réponse !

Je connais super bien les bases de données , en particulier mysql !

As tu compris ce que je voulais faire ?

En fait j'ai déja la liste des liens vers les fiches produits (contenu dans une base)
, cependant j'aimerais récupérer qu'une partie des informations contenus de ces liens de fiches produits 'voir plus haut)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 13:49
tu veux récupéré les valeurs du genre prix tva etc de chaque produit pour en faire autre chose si j'ai bien compris

seulement je ne comprend pas pourquoi tu veux les récupérer une fois généré en html surtout si ils sont déjà dans une base de donnée

si ton but est de pouvoir les récupérer en javascript pourquoi ne pas le faire en json par exemple ou créer directement un tableaux js entre balises script...

après ca reviendrai presque au même que de le faire dans des div en étant plus simple et plus légé

sinon si tes div sont déjà dans ton code source tu peux accèder à leur contenu en js avec document.getElementById().innerHTML

mais ça reste bizarre comme méthode...

tu veux récupérer ces valeur pour en faire quoi ?
tu veux les traiter avec quel langage ?
je ne comprend pas bien effectivement...
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
17 nov. 2009 à 14:07
Effectivement je souhaite récupérer les informations tel que le prix , tva , ref etc...

1/ C'est le lien des pages que j'ai et non pas les informations ;)

2/ Je souhaite récupérer ces valeurs pour faire un comparatifs sous excel des principaux sites de bricolage sur certaines catégories de produits

3/ Voici un petit exemple qui pourrait t'aider a mieux comprendre


Pour : chaque page contenues dans la base (produits)

Faire : -Récuperer les infos contenus dans les div : prix , tva

-Les afficher sur la page (ou les enregistrer dans une base)


PS : La page ou je vais codés est indépendante du site !


Cordialement
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 14:30
si tu as accès au premiers site le mieux serait de faire un fichier json ou autre dessus
et d'aller rechercher ce fichier ensuite avec le second

si des deux coté c'est traité en php un simple serialize unserialize suffirait à pouvoir traiter les données

pour le faire uniquement à partir des liens il faut parser le html pour en extraire ensuite les données que tu veux et là c'est autre chose... c'est a prendre en dernier recours ça !

je ne connais pas de moyen simple de parser le xml... mais regarde de ce coté : https://www.php.net/manual/fr/refs.xml.php

ou alors je viens de penser à autre chose mais il faut que tu connaisses précisément la structure de tes div

tu peux peut être faire un truc du genre :
fopen();
$file = fread();
fclose();
preg_match("#id=\"tva\">([0-9\.]*)</div>#",$file,$tva);
echo $tva[1]; //contiendra normalement la tva valeur de la tva


mais ca reste du bricolage...
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
17 nov. 2009 à 14:34
J'ai enfin réussi a te faire comprendre ! LOL !

Tu n'est pas le premier a me dire d'utiliser pregmatch , mais malgrés les quelques connaisances que je posséde en php , cette fonction est completement inconnue pour moi?

J'ai cherché un peu de tuto sur le net , je trouve rien d'intéressant concernant ce que je recherche

Peut tu m'expliquer un peu plus cela (je t'oblige pas mais ça serait sympa) :

fopen();
$file = fread();
fclose();
preg_match("#id=\"tva\">([0-9\.]*)</div>#",$file,$tva);
echo $tva[1]; //contiendra normalement la tva valeur de la tva

MERCI BEAUCOUP
je reste à ta dispo pour d'éventuel questions biensur ;)
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 14:56
c'est pas facile à utliser au début...

voilà ou tu renseigner sur cette fonction :

https://www.php.net/manual/fr/function.preg-match.php
https://www.php.net/manual/fr/pcre.pattern.php

voilà la doc officiel tu en aura besoin !

et un tutoriel simple pour commencer : https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/916990-les-expressions-regulieres-partie-1-2

ensuite pour ouvrir le fichier pour simplifier fopen etc utilise plutot file_get_contents():
voilà la doc : https://www.php.net/manual/fr/function.file-get-contents.php

donc :
<?php

	$file = file_get_contents('http://www.adressedetonsite.fr'); //ouvre et lis le fichier dans une chaine
	if(preg_match("#id=\"tva\">([0-9\.]*)</div>#",$file,$tva)) { //recherche l'id tva avec un contenu numérique
		$tva = $tva[1]; // si tva est trouvé attribut la valeur à la varieble tva
	}
	
	/*
	
		pour la regex :
		
		l'expression est une chaine de caratère d'où les "
		
		les # servent de délimiteur , pour dire ou comment et fini le masque
		
		id=\"tva\"> vas rechercher id="tva"> dans le fichier les \ servent à échapper les "
		
		([0-9\.]*) les parenthèse servent à capturer leur "contenu"
					entre crochet ce sont des classes de caractères 0-9 var rechercher tout les caractère allant de 0 à 9 \. inclu le . dans la classe en l'échappant
					le * signifie que cette classe peut être 0 ou autant de fois qu'on veut (je m'explique mal) par exemple la classe reconnaitra :
					(je délimite les valeur par une virgule)
					1, 12, 955486.156, ., .125, etc.
		
		</div> recherche </div>
		
		donc la regex va rechercher dans le fichier id="tva"> suivit d'un nombre qui contient ou non un . suivie de </div>
		
		les parenthèse capturante :
		
		la variable $tva en argument de la fonction preg_match va recevoir un tableau des valeur capturéabs
			$tva[0] est la capture du masque complet
			$tva[1] est la capture de la parti du masque entre la première parenthèse
			$tva[2] la capture de la seconde
			
		les parenthèse sont compter dans l'ordre d'ouverture
		
		par exemple : (<= 1 (<=2 )(<=3 ))(<=4)
	
	*/

?>
0
Je te remerci beaucoup , ca marche !!!

Je vais essayer maintenant de le faire pour les 1000 sites que j'ai en base .

Je te tiens au jus.
0
Merci beaucoup ca a l'air de marcher !

Je vais essayer avec tous les sites que j'ai en base
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 15:13
par contre ce n'est à mon avis pas la meilleure solution à ton problème !

le mieux serait un truc du genre sur ton premier site :

<?php
	$pathFile = './monchier.cequejeveux'
	
	$produits = array();
	$data =  mysql_query("SELECT * INTO produits");
	while($p = mysql_fetch_array($data)) {
		$produits[$p['nom']]['tva'] = $p['tva'];
		$produits[$p['nom']]['prix'] = $p['prix'];
		$produits[$p['nom']]['ref'] = $p['ref'];
		// etc.
	}
	file_put_contents($pathFile,serialize($produits),LOCK_EX);

?>


et un truc du genre à l'arrivé :

<?php

$adrFile = 'http://www.monsite.fr/adresse/monfichier.cequejeveux';
$produits = unserialize(file_get_contents($adrFile));

//$produits contient le tableaux laissé sur l'autre site... 

?>
0
TEST
0
Merci , ca à l'air de marcher !!!


Mais pour les chaine de caractéres on remplace les 0 9 par "a" et "z" ??
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 15:34
oui par exemple regarde les liens que je t'ai mis il y a la documentation dedans et comment construire des masques
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
17 nov. 2009 à 15:51
Peut tu m'expliquer rapidement les différentes actions qu'effectue ceci : (merci beaucoup)


<?php
$pathFile = './monchier.cequejeveux'

$produits = array();
$data = mysql_query("SELECT * INTO produits");
while($p = mysql_fetch_array($data)) {
$produits[$p['nom']]['tva'] = $p['tva'];
$produits[$p['nom']]['prix'] = $p['prix'];
$produits[$p['nom']]['ref'] = $p['ref'];
// etc.
}
file_put_contents($pathFile,serialize($produits),LOCK_EX);

?>

et un truc du genre à l'arrivé :


<?php

$adrFile = 'http://www.monsite.fr/adresse/monfichier.cequejeveux';
$produits = unserialize(file_get_contents($adrFile));

//$produits contient le tableaux laissé sur l'autre site...

?>
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 16:18
ca va chercher dans la base de donnée toutes les données de la table produit

ca construit ensuite un tableau sous la forme

$produits = array(
'mon produit' => array(
'prix' => 50,
'tva' => 19.6,
'ref' => 'edfg15578dfg'
),
'mon produit2' => array(
'prix' => 15,
'tva' => 19.6,
'ref' => 'df4d8frd4f8g5f'
)
etc.
);

ça transforme ce tableau en chaine de caractère grâce à serialize()

et ça le stock dans un fichier

le second script va rechercher ce fichier

lit la chaine de caractère et reconstitue le tableaux...
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
17 nov. 2009 à 16:22
Dans ma base ce sont les liens sur lequele je dois récupérer les infos , ce ne sont pas les produits
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
17 nov. 2009 à 16:30
ok enfait si je comprend bien tu veux faire un comparateur de prix sur des sites distants sans avoir accés à leur code php?

et tu veux automatiser le référencement des valeurs en donnant à ton script uniquement l'adresse de la page?

si c'est bien ça ça risque d'être difficile à faire parce qu'il faut qu'il y est un identifiant sur chaque détail de produit et que cette identifiant ne contienne que ça après il faut que ton script reconnaissent l'url et que tu puisse ouvrir la page en php...
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
23 nov. 2009 à 14:32
Lorsque je récupére un chemin de type /images/3.jpg

Que dois je mettre a la place de : ([0-9\.]*)

j'ai essayé de cherche sur le manuel mais aucun ne marche



Autre question : Ceux qu'on veut récupérer doit t'il obligatoirement venir d'une balise div ?? car j'aimerais récupérer ceux qu'il y a entre ce textarea :

<TEXTAREA style="position: absolute ;display:none;" id="designation2" NAME="designation2" COLS=20 ROWS=6 >Hauteur : 1.19 m, largeur : 1 m, produit répondant à la norme NFP 90306.</TEXTAREA>


merci beaucoup Atropa
0