11
2010
Récupérer le code source d’une page avec Java
J’ai présenté il y a peu un petit programme que j’ai créé (Skyblog Photos Downloader) et pour lequel je dois récupérer le code source d’une page web.
Après avoir un petit peu cherché, j’ai trouvé une solution très simple qui permet de récupérer soit le code source d’une page en entier, soit ce code html mais ligne par ligne …
Pour enregistrer le code source d’un page, il faut utiliser à peine 3 classes différentes comme ceci :
Tout d’abord, nous utilisons la classe URL, du package java.net, pour établir une connexion avec le site. Ensuite, l’objet InputStreamReader est utilisé afin de récupérer le contenu de la page web. Dans l’API Java de Sun, on peut lire qu’il est fortement conseillé d’utiliser un BufferedReader lorsqu’on utilise un InputStreamReader et ce pour éviter une perte d’informations (lors de la conversion d’octets – bytes en anglais – en caractères). Les explications à ce propos venant de l’API :
Each invocation of one of an InputStreamReader’s read() methods may cause one or more bytes to be read from the underlying byte-input stream. To enable the efficient conversion of bytes to characters, more bytes may be read ahead from the underlying stream than are necessary to satisfy the current read operation.
For top efficiency, consider wrapping an InputStreamReader within a BufferedReader
Ainsi, on va utiliser un BufferedReader pour réceptionner les informations reçues. Et ensuite, c’est tout ! Notre bufferedReader contiendra notre code. Il suffit de le lire ligne par ligne et d’ajouter chaque ligne dans notre String final.
Et maintenant, le code complet.
Dans ce cas-ci, la méthode renvoie un gros string contenant tout le code. Il est bien entendu possible de travailler chaque ligne à la fois afin de ne pas être trop gourmand en mémoire vive !
[codesyntax lang="java"]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
public static String getCode(String url)
{
String code = "";
if(urlExists(url))
{
BufferedReader in = null;
try
{
URL site = new URL(url);
in = new BufferedReader(new InputStreamReader(site.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
{
code = code + "\n" + (inputLine);
}
in.close();
}
catch (IOException ex)
{
System.out.println("Erreur dans l'ouverture de l'URL : " + ex);
}
finally
{
try
{
in.close();
}
catch (IOException ex)
{
System.out.println("Erreur dans la fermeture du buffer : " + ex);
}
}
}
else
{
System.out.println("Le site n'existe pas !");
}
return code;
} |
[/codesyntax]
Comme vous pouvez le voir, la première condition vérifie si un site existe ou non. Voici comment j’ai implémenté cette petite méthode :
[codesyntax lang="java"]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public static boolean urlExists(String url)
{
try {
URL site = new URL(url);
try {
site.openStream();
return true;
} catch (IOException ex) {
return false;
}
} catch (MalformedURLException ex) {
return false;
}
} |
[/codesyntax]
Vous voilà donc maintenant apte à récupérer le code source d’une page internet. Si vous désirez y récupérer des informations, je vous invite à regarder du coté des méthodes indexOf et substring de la classe String ou bien alors, au niveau des expressions régulières en Java (Regex).
Si vous avez une meilleure implémentation d’un tel code, n’hésitez pas à laisser un commentaire !
Comme il a été signalé dans un commentaire, l’utilisation d’une méthode externe (urlExists) pour la vérification est superflue. Vous pouvez tout à fait intégrer ce test dans la méthode principale.
A lire également ...
2 commentaires + Ajouter un commentaire
Ajouter un commentaire
Les p’tits derniers
- Un site web pour sa société ? Une nécessité !
- Comment protéger et retrouver son ordinateur en cas de vol
- Des codes promo en veux-tu en voilà avec CodesPromotion.fr
- Changer de forfait mobile ? C’est facile !
- Un service professionnel pour récupérer des données perdues
- Augmenter son ratio torrent T411 facilement avec RatioMaster
- Utiliser plusieurs bureaux sous Windows
- Activer le mode monitor et utiliser Aircrack avec une carte Broadcom BCM43xx
- Comment envoyer un poke automatique sur Facebook (Autopoke)
- Double Down Casino

Auteur :




Bien joué pour le code
Mais si je peux me permettre une petite remarque.
Je pense que ta fonction urlExist est inutile. dans le sens où a cause de celle ci tu fait appel 2 fois à new URL et 2 fois a openstream(). ce qui prend donc beaucoup plus de temps.
Alors que le but principale (il me semble) de cette fonction est de tester si l’url est du bon format et si le site existe. ces deux try{}catch{} peuvent judicieusement etre integré au code principale afin d’appeler qu’une seule fois new URL et openStream()
Et aussi il y a dans ton code un truc du genre { { (instructions) } } il me semble que tu peux en enlever une paire
Merci pour ton commentaire.
En effet, il y a moyen de coupler la vérification d’url dans le code. La raison de ma méthode externe urlExists est bête : j’ai fait ce code pour mon application “Skyblog Photos Downloader” où je teste plusieurs fois si une URL existe.
D’où ce petit bout de code. Mais, je te l’accorde, il serait plus optimal de faire tout en un et inviter ainsi 2 instructions.
Pour les accolades, bien vu !
Je corrige ça tout de suite