Rechercher : dans
Par :

[java] recuperation liens d'une page Web

Dernière réponse le 21 mar 2008 à 17:44:05 karine, le 2 jun 2005 à 15:23:52 
 Signaler ce message aux modérateurs

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 !

Meilleures réponses pour « [java] recuperation liens d'une page Web » dans :
[FreeMind] Publier une mindmap dans une page web VoirFreeMind est un logiciel de mindmapping. Vous avez plusieurs possibilités pour publier votre mindmap dans une page web. Flash applet Java Simple image PNG HTML+Javascript (texte seulement) HTML+Javascript (texte+icônes) HTML+Javascript...
[Web] Eliminer totalement les publicités dans les pages WEB VoirVoici une méthode radicale et simple pour éliminer 99% des publicités dans les pages web, quel que soit le site et quel que soit le type de publicité (popup, incluse, bannière, flash, IFrame, Java, CSS, applet Java...) 1. Installez...
[Webmaster] Publier facilement une vidéo dans une page web VoirPublier une vidéo dans une page web n'est pas toujours évident: Selon le format (AVI, MPG, MOV...) tout le monde ne possède pas forcément le bon plugin et le bon codec. En revanche, la quasi-totalité des navigateurs possèdent le plugin Flash (SWF)....

1

jebok, le 2 jun 2005 à 15:43:58
  • +1

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
Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

2

karine, le 2 jun 2005 à 15:58:11

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 ! ;-)

Répondre à karine

3

jebok, le 2 jun 2005 à 15:59:29

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
Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

4

karine, le 2 jun 2005 à 16:03:14

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 ?

Répondre à karine

5

jebok, le 2 jun 2005 à 16:14:41

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
Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

6

karine, le 2 jun 2005 à 16:18:20

OK, je te fais confiance !

Merci encore !

A+

Répondre à karine

7

karine, le 2 jun 2005 à 16:34:39

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 !

Répondre à karine

8

jebok, le 2 jun 2005 à 16:42:44

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.
Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

9

karine, le 2 jun 2005 à 16:48:59

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]-recupera­tion-liens-d-une-page-Web#ecrire

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

est un repertoire ou non ?

Répondre à karine

10

jebok, le 2 jun 2005 à 17:19: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
Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

11

karine, le 2 jun 2005 à 17:24:21

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é ;-)

Répondre à karine

13

jebok, le 2 jun 2005 à 17:46: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... Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

12

jebok, le 2 jun 2005 à 17:27:29

Et si le Content-Type est vide, ça veut dire que l'url se termine par un repertoire ?
je vais vérifier ca... Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

14

jebok, le 2 jun 2005 à 17:52:40

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 ------------------------
Mal nommer les choses, c'est ajouter aux malheurs du monde.
(Albert Camus)

Répondre à jebok

15

karine, le 3 jun 2005 à 09:40:06

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+

Répondre à karine

16

nul de l'internet, le 21 mar 2008 à 17:26:19

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.

Répondre à nul de l'internet

17

 Dalida, le 21 mar 2008 à 17:44:05

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 !
[ Mathieu ]

Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !

Répondre à Dalida
Collection CommentÇaMarche.net