IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Récupérer le contenu d'une page web


Sujet :

Langage Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut Récupérer le contenu d'une page web
    Bonjour,

    J'ai un petit souci sur la récupération de contenu d'une page web (https://www.pmu.fr/turf/#!/28082014 {les dernier numéro correspondant à la date du jour}).
    Petite historique de pourquoi le faire en java, je me suis fait une petite macro sous excel qui permet de faire des statistiques sur les courses hippique, efficace mais malheureusement pour la récupération de statistique, la macro ne fonctionnait pas avec tous les site, du coup passage à java, une meilleur compatibilité avec les sites
    Mais comme avec le site pmu, je n'arrive pas à récupérer les infos des courses en cours, des résultats avec leur interface, seulement en faisant un copier coller sauvage => je ne veux pas faire ça.
    Mon but est :
    • faire une routine qui me permet de récupérer un maximum d'info (vers 1 heure du matin)=> en partie j'y arrive sauf pour le pmu
    • faire une base de données avec MySQL, une fois les données pouvant être collectées, je me pencherai sur ce problème
    • faire des pronostics (pour l'instant fiable sous certaines conditions.

    pour cela, java pourra bien m'aider
    Je vous passe le code utilisé pour récuperer le code de la page, mais pas le contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
     
    package import_donnees;
     
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
     
    public class import_site {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		 try{
    			 URL url = new URL("https://www.pmu.fr/turf/#!/28082014");
     
    			 URLConnection con=url.openConnection();
    			 System.out.println(con.getContent());
    			    InputStream input = con.getInputStream();
    			    while(input.available()>0)
    			    {
    			    	FileWriter writer = null;
    			    	char texte =((char)input.read());
    			    	try{
    			    	     writer = new FileWriter("temp_partantpmu.txt", true);
    			    	     writer.write(texte);
    			    	}catch(IOException ex){
    			    	    ex.printStackTrace();
    			    	}finally{
    			    	  if(writer != null){
    			    	     writer.close();
    			    	  }
    			    	}
     
    			    }
    			    //System.out.print((char)input.read());
    			 }
    			 catch(MalformedURLException e){
    			 System.out.println(e);
    			 }
    			 catch(IOException e){
    			 System.out.println(e);
    			 }
    	}
     
    }
    Celui-ci fonctionne pour les sites où les données affichées sont dans le code source de la page, mais pour le site cité plus haut, ce qui me renvoie est (extrait dans un fichier texte avec les retours à la ligne faits) :

    <!doctype html>

    <!--[if IE]>
    <![endif]-->

    <html class="no-js" lang="fr">

    <!-- version : 10.1.40 -->

    <head>

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

    <meta name="description" content="Pmu.fr vous conseille dans vos paris. Pmu.fr on parie que vous allez gagner !"/>

    <meta name="keywords" content="PMU, Tirelire, course, Quinté+, Multi, Tiercé, 2sur4, Couplé, parier, paris, hippiques, pariez spot, Pari football, paris sportifs, pari sportif, poker, Texas hold'em"/>

    <meta name="fragment" content="!">

    <title>Turf, Courses Hippiques, Courses en direct - PMU</title>

    <link href="https://cache.pmu.fr/turf/css/images/favicon.ico" rel="shortcut icon" type="image/x-icon"/>

    <link href="https://cache.pmu.fr/turf/css/1407770239495_styles-online.css" rel="stylesheet" type="text/css"/>

    </head>
    <!--[if IE 9]>
    <body class="ie ie9">
    <![endif]-->

    <!--[if IE 8]>
    <body class="ie ie8">
    <![endif]-->

    <!--[if IE 7]>
    <body class="ie ie7">
    <![endif]-->

    <!--[if !IE]>-->
    <body class="not-ie">
    <!--<![endif]

    En gros ma question,y a-t-il une solution pour récupérer le contenu de la page (ce qui s'affiche) mais pas le code source de cette page ?

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    D'abord j'ai plusieurs remarques sur ton code :
    • Tous ces catch avec e.printStackTrace() !
      Si tu ne sais pas quoi faire d'une exception cela signifie que ne faut pas la catcher, et simplement la laisser remonter.
    • Le try/catch/finally pour la liberation des ressources est lourd et pas pratique.
      Il vaut mieux lui préférer un try/finally par ressource (oue le try-with-ressource de Java 7 si possible bien sûr).
    • Evites d'utiliser available().
      Cela indique seulement la quantité de donnée déjà arrivé, et cela pourrait te tronquer des données.
      Contentes-toi de lire jusqu'à que read() retourne -1...
    • Tu lis les caractères 1 par 1 ! Et en réouvrant le fichier de destination à chaque fois...
      En plus tu mélanges byte et char...
      C'est super lourd ! Une boucle de lecture/ecriture serait plus efficace.


    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    	public static void main(String[] args) throws IOException {
    		URL url = new URL("https://www.pmu.fr/turf/#!/28082014");
     
    		URLConnection con = url.openConnection();
     
    		InputStream input = con.getInputStream();
    		try {
    			OutputStream output = new FileOutputStream("out.txt");
    			try {
    				byte[] buffer = new byte[8192];
    				int len;
     
    				// boucle de lecture/ecriture
    				while ( (len = input.read(buffer)) > 0) {
    					output.write(buffer, 0, len);
    				}
    				output.flush();
    			} finally {
    				output.close();
    			}
    		} finally {
    			input.close();
    		}
    	}


    Ensuite pour ton problème, le site charge des données en AJAX via d'autres URL (ile te faudra un navigateur avec un inspecteur web pour voir cela).
    C'est ces pages que tu devras récupérer...


    a++

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 154
    Points
    154
    Par défaut
    Merci, beaucoup plus rapide que ce que j'avais pu bidouiller en récupérant des informations sur internet.

    Tourne beaucoup plus vite
    J'ai évité le soucis depuis en passant par un autre site, en plaçant des arguments pour pouvoir faire ça sur plusieurs pages, mais, j'ai plein d'autres questions pour lesquelles google n'est pas un ami des plus fiable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le contenu d'une page web protégée
    Par karoudja dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2007, 10h21
  2. récupérer le contenu d'une page web
    Par marielaure2805 dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2007, 13h12
  3. Récupérer le contenu d'une page web
    Par smarties dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/02/2007, 01h25
  4. [Servlet]Récupérer le contenu d'une page web
    Par Jarodnet dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/10/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo