[java] recuperation liens d'une page Web

Fermé
karine - 2 juin 2005 à 15:23
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 21 mars 2008 à 17:44
Bonjour !

J'ai fait un truc qui récupère les liens situés dans les balises <a href> des pages html.

Si le lien est du type <a href = "/mainlinglist.html">
Je rajoute l'url de la page courante avant pour obtenir le lien complet.

Mais là, problème !
Si l'url de la page est webby.free.fr/html/images.html par exemple, regardez dans le code source de cette page, il y a un lien /caracteres.html

Mais l'url correcte n'est pas webby.free.fr/html/images.html/caracteres.html

mais webby.free.fr/html/caracteres.html

Quest-ce que ça veut dire ? où sont les ../caracteres.html qui me permettrait de savoir qu'ils faut remonter dans l'arborescence ?

J'espère que j'ai été claire, et qu'il y aura des réponses ;-)

merci !
A voir également:

13 réponses

jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 15:43
voici les liens relatifs et leur correspondance en lien absolu :

"/dossier/page.html" : on revient à la racine du site

"dossier/page.html" : on continue dans le même répertoire
"./dossier/page.html" : on continue dans le même répertoire

"../dossier/page.html" : on remonte d'1 niveau
"../../dossier/page.html" : on remonte de 2 niveaux
1
Merci jebok !!

Décidément, tu es incollable sur plein de trucs !

Là j'y vois beaucoup plus clair, ah les mystères de l'informatique ! ;-)
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 15:59
salut,
en fait je viens de réaliser un aspirateur de pages web en Java donc évidemment tout ca est très frais pour moi...

Si t'as d'autres problèmes, don't hesitate ! ;-)

bye
0
Et quand tu parles de la racine du site, est-ce que c'est le host, ou est-ce que c'est le début de l'url avant un /

Du genre www.commentcamarche.net/forum/, sa racine c'est www.commentcamarche.net

Est-ce que ça marche à tous les coups ?
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 16:14
Dans ton exemple, la racine c'est www.commentcamarche.net

Normalement ca marche à tous les coups !

Ici tu auras quelques explications (peut être + claires ?) mais en gros c'est la même chose que ce que je t'ai dit :
http://www.lecourshtml.com/html/liens1.php3#locaux
0

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

Posez votre question
OK, je te fais confiance !

Merci encore !

A+
0
Je me pose encore une question ...

Si j'ai un lien "dossier.html"
Et une url webby.free.fr/html/images.html

Le lien que je dois obtenir est webby.free.fr/html/dossier.html

Mais comment faire ?
Disons que je remonte d'un cran et que j'insere /dossier.html

Mais si j'ai une url comme ça : webby.free.fr/html
Je suis dans un dossier, est-ce que le résultat est webby.free.fr/html/dossier.html ou webby.free.fr/dossier.html ?

En fait tout ça n'est pas très clair ...

merci d'avance !
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 16:42
je vais essayer de répondre à ta question. si ce n'est pas clair, n'hésite pas à me demander.

si tu es sur la page webby.free.fr/html/images.html
tu te trouves en réalité dans le dossier webby.free.fr/html
Tu n'as donc pas besoin de remonter d'un cran car remonter d'un cran = remonter d'un dossier.
Si tu veux obtenir le lien webby.free.fr/html/dossier.html
il te suffit d'écrire :
<a href="dossier.html"> ... <\a>



par contre, si tu écris ca :
<a href="../dossier.html"> ... <\a>

Tu remontes effectivement d'un cran (et donc d'un dossier) et tu te retrouves à la page webby.free.fr/dossier.html

J'espère avoir été clair.
0
C'est très clair !

Mais techniquement, si j'ai une url, comment je détermine le dossier courant ?

Par exemple, www.commentcamarche.net/forum/affich-1568051-[java]-recuperation-liens-d-une-page-Web#ecrire

comment je fais pour savoir que affich-1568051-[java]-recuperation-liens-d-une-page-Web#ecrire

est un repertoire ou non ?
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 17:19
normalement une url s'écrit soit comme ca :
http://www.site.com/repertoire/page.html
soit comme ca :
http://www.site.com/repertoire

Dans le 2ème cas, le navigateur ouvre la page nommée index.html

Remarque les pages peuvent s'appeler *.html ou *.php ou ...

En Java, pour savoir à quel type d'url tu as affaire, utilise la méthode suivante :
import java.net.*;
URL lien = new URL("http://www.monsite.com/...");
String typeMIME = lien.openConnection().getContentType();

ca te renvoie le type MIME du fichier vers lequel pointe l'URL.
Pour plus d'infos sur le type MIME des fichiers :
http://www.commentcamarche.net/systemes/mime.php3
0
Et si le Content-Type est vide, ça veut dire que l'url se termine par un repertoire ?

Si la réponse est oui, je crois que j'ai compris, sinon c'est pas gagné ;-)
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 17:46
En fait, je viens de tester et si tu lui entres une url du type http://www.site.com/repertoire
il renvoie le type MIME suivant : text/html

A vrai dire je ne sais pas vraiment pourquoi...
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 17:27
Et si le Content-Type est vide, ça veut dire que l'url se termine par un repertoire ?
je vais vérifier ca...
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
2 juin 2005 à 17:52
Si tu veux, j'ai écrit un bout de code qui transforme un lien relatif en lien absolu (j'en ai eu besoin pour mon aspirateur de pages web).
Mais pour le faire, j'ai vraiment fait du bricolage...
Je te laisse découvrir ça (si tu trouves quelque chose de mieux n'hésite pas !) :

-------------------- début -----------------------
/**
    * Méthode qui transforme un lien relatif en lien absolu
    *
    * @param str	lien relatif
    * @return		lien absolu
    */
   private String transforme(String str){
   	
   		/** on vérifie si le lien commence par http:// auquel cas
   		 * c'est un lien absolu */
   		Pattern motif1 = Pattern.compile("^http://", Pattern.CASE_INSENSITIVE);
   		Matcher moteur1 = motif1.matcher(str);
   		boolean ok1 = moteur1.find();
   	
   		/** on décompose le lien selon les slash (/)   */
   		String[] separe = lien_.toString().split("/");
   		/** longueur du tableau précédent */
   		int n = separe.length;
   		
   		/** on récupère le nom du fichier pour savoir jusqu'où remonter */
   		String chemin = lien_.getFile();
    			String[] name = chemin.split("/");
    			if (name.length < (n-2) )
    				n--;
    			else{
    				String[] separe2 = name[n-2-1].split("\\.");
    				if (separe2.length >1)
    					n--;
    			}
   		
   		/** on cherche si on doit revenir à la racine du site */
   		Pattern motifRacine = Pattern.compile("^/");
   		Matcher moteurRacine = motifRacine.matcher(str);
   		boolean okRacine = moteurRacine.find();
   	
   		/** on cherche si c'est un lien relatif introduit par: ./  */
   		Pattern motifRelatif = Pattern.compile("^\\./");
   		Matcher moteurRelatif = motifRelatif.matcher(str);
   		boolean okRelatif = moteurRelatif.find();
   		if (okRelatif) {str = str.substring(2);}
   	
   		/** on cherche si on doit remonter aux répertoires parents
   		 * (introduit par ../)  */
   		Pattern motifParent = Pattern.compile("^\\.\\./");
   		Matcher moteurParent = motifParent.matcher(str);
   		/** dans ce cas on traite le lien */
   		while (moteurParent.find()){
   			/** on enlève les 3 premiers caractères (../) */
   			str = str.substring(3);
   			/** on recommence pour voir s'il faut encore remonter 
   			 *  pour cela on modifie le moteur de recherche */
   			moteurParent = motifParent.matcher(str);
   			n--;
   		}
   	
   		/** lien absolu qui sera retourné à la fin */
   		String lienAbs;
   	
   		/** on commence à traiter le lien */
   		/** si lien est déjà absolu, on ne fait rien */
   		if (!ok1){
   			
   			/** si l'on doit revenir à la racine du site c'est simple */
   			if (okRacine) 
   				lienAbs = "http://"+lien_.getHost().toString()+str;
   			
   			/** sinon */
   			else{
   				String s="";
   				for (int i=0; i<n; i++){
   					s = s+separe[i]+"/";
   				}
   				lienAbs = s+str;	
   			}
   		}
   		/** si le lien est déjà absolu on ne le modifie pas */
   		else {lienAbs = str;}
   	
		/** on renvoie le lien absolu */
  		return lienAbs;
   }

-------------------- fin ------------------------
0
Merci beaucoup jebok !

Je vais regarder ça en détail ...
Si j'améliore ton code, je te l'enverrai (si j'y arrive ;-) )

A+
0
nul de l'internet
21 mars 2008 à 17:26
J'ai téléchargé une carte postale d'un site.Par contre,je ne sais pas comment l'insérer à mes contacts,ni ou inscrire le lien.
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
21 mars 2008 à 17:44
salut,

commence par la charte du site, tu y trouveras des conseils pour savoir où et comment poser tes questions.

sinon tu n'auras jamais de réponses !
-;o)

à plus !
0