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

Android Discussion :

extraire donnée page web


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Points : 8
    Points
    8
    Par défaut extraire donnée page web
    bonjours, cela fait plusieurs jour que je cherche un exemple pour extraire des information du page web sans grand résulta si quelqu'un pouvait me donnée le debut d'une piste.

    merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 164
    Points : 227
    Points
    227
    Par défaut
    Tu peux commencer à télécharger la page en utilisant URLConnection (n'oublie pas les timeout) exemple :

    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
    URLConnection cn = new URL(URL_DATA).openConnection();
    cn.setConnectTimeout(15000);
    cn.setReadTimeout(15000);
    cn.connect();
     
    InputStream stream = cn.getInputStream();
     
    byte buf[] = new byte[16384];
    StringBuffer out = new StringBuffer();
    int numread;
    do {
     
        // Télécharge
        numread = stream.read(buf);
     
        // Ecrit dans le buffer
        if (numread > 0) out.append(new String(buf, 0, numread));
     
        // Calcul de l'avancement
        // On compte 20% au début pour la connexion et 10% pour le traitement final
        publishProgress((int)((float)out.length() / (float)length * 70.0f) + 20);
     
    } while (numread > 0);
     
    stream.close();
    return out.toString();
    En ensuite il faut extraire les infos qui t'intéressent par exemple avec des expressions régulières mais tout dépend de la page en question.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    j'ai vue sur plusieurs site des référence a xpath, st il possible de l'utiliser sur des page html?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 164
    Points : 227
    Points
    227
    Par défaut
    Sa dépend vraiment comment est faite la page, si c'est une page XML oui mais du HTML classique il y a des balises qui ne sont pas refermés par exemple <img> il n'y a pas de </img>, parfois <img /> qui est conforme au XML mais c'est loin d'être systématique. Et encore là c'est pour un fichier HTML valide !

    Si c'est toi qui est à l'origine du fichier et que tu à la main sur le format alors tu peux utiliser un peu ce que tu veux mais si tu veux parser une page quelconque oublie ...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    sa serai pour une page web quelconque quel serai la meilleur solution existe t'il des librairies?

    ps : je n'est pas la main sur la page html

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Me semble bizarre ce code:
    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
     
    byte buf[] = new byte[16384];
    StringBuffer out = new StringBuffer();
    int numread;
    do {
     
        // Télécharge
        numread = stream.read(buf);
     
        // Ecrit dans le buffer
        if (numread > 0) out.append(new String(buf, 0, numread));
     
        // Calcul de l'avancement
        // On compte 20% au début pour la connexion et 10% pour le traitement final
        publishProgress((int)((float)out.length() / (float)length * 70.0f) + 20);
     
    } while (numread > 0);
    D'un coté on lit des bytes... de l'autre on enregistre des chars...
    Avec comme conversion un "new String(buf,0,numread)" qui utilise donc UTF-16 par défaut, ce qui est loin d'être le défaut pour les pages web (ISO-8859-1).
    Il faudrait peut-être lire le charset de la page avant non ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    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
    public void test ()
    	{
    		try
    		{
    			try
    			{
    				URL oracle = new URL("http://www.google.fr/");
    				URLConnection yc = oracle.openConnection();
    				BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    				String inputLine;
    		        while ((inputLine = in.readLine()) != null) 
    		            System.out.println(inputLine);
    		        in.close();
    			}
    			catch (MalformedURLException me)
    			{
    				System.out.println(me);
    			}
     
    		}
    		catch (Exception ex)
    		{
    			System.out.println(ex);
    		}
    	}
    voila j'essaye se bout de code mes j'ai une erreur qui fait que de sortir

    05-12 16:11:33.875: E/AndroidRuntime(14230): Caused by: android.os.NetworkOnMainThreadException
    le problème viendrai de la ligne n°9

    si quelqu'un a la solution merci d'avance

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Utilisation du réseau interdite dans le thread réservé à l'UI (onCreate(), toutes les fonctions de l'activité en général).

    Utiliser une AsyncTask pour effectuer des appels réseaux (et récupérer le résultat dans le thread UI).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    apres quelque recherche j'ai fait se petit bout de code pour parcourir le code source

    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
     
    private void evaluer (String code) {
    		String[] xpath = "/html/body/div[2]/div[2]/div[2]/div/table[1]/tbody/tr[1]/td[2]/a[1]".split("/");
    		String[] balise = new String[3];
    		int y = 0;
    		int position = 0;
     
    		for (int x=1; x<xpath.length; x++) {
    			if (xpath[x].indexOf("[") != -1) {
    				balise = xpath[x].split("[");
    			}
    			else {
    				balise[0] =  xpath[x];
    			}
     
    			position = code.indexOf(balise[0],y);
    			if ( position != -1){
    				y = position+1;
    			}
     
    		} 
    		balise[3] = "fin";
     
    	}
    seulement j'ai un petit problème a la ligne n°10.
    si je fait un split sur le caractere '[' j'ai un erreur :

    05-13 22:13:49.575: E/AndroidRuntime(18574): java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 1:
    merci d'avance

Discussions similaires

  1. Recuperer données page web
    Par lounix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 24/02/2012, 16h27
  2. [PHP 5.3] Récupérer données pages web via PHP
    Par je.rochebrochart dans le forum Langage
    Réponses: 1
    Dernier message: 02/10/2011, 11h00
  3. Récuperer données page web
    Par iperkut dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/09/2010, 19h51
  4. [w10]récupérer données page web
    Par minoltis dans le forum WinDev
    Réponses: 2
    Dernier message: 08/02/2007, 13h53
  5. [Système] Extraire des données d'une page web
    Par nazoreen dans le forum Langage
    Réponses: 17
    Dernier message: 22/03/2006, 21h38

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