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

Développement Web en Java Discussion :

Enregistrement données fichier Excel depuis URL


Sujet :

Développement Web en Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2015
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Enregistrement données fichier Excel depuis URL
    Bonjour,

    J'ai un gros problème, voila pour les besoins du taff il veulent un programme qui puissent récupérer des éléments d'une page web, le moyen que j'ai trouver pour faire cela est avec l'api jsoup qui me permet de parser les pages et récupérer l’élément .class afin de les l'insérer dans un fichier excel, le problème est que certains .class on le même nom mais ne définissent pas la même chose

    EX: <p class="AmmCorpsTexte">Pommade.</p>

    <p class="AmmCorpsTexte">Traitement d'appoint des dermites irritatives.</p>

    Pour exemple c'est deux données doivent se trouver dans une colonne différente de ma feuille excel, comment faire pour les différencier, et comment répéter la même opération pour 13 000 pages ?

    Je laisse mes code pour que vous puissiez y voir plus claire :

    Classe qui me permet de parser la page,*

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    package net.clinsearch.interne.drugs.parseur;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.io.Writer;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.ListIterator;
     
    import javax.ejb.Remove;
     
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.nodes.Node;
    import org.jsoup.safety.Whitelist;
    import org.jsoup.select.Elements;
     
    import com.sun.messaging.jmq.jmsserver.auth.usermgr.Output;
    import com.sun.messaging.jmq.jmsserver.data.handlers.admin.GetMessagesHandler;
     
    @SuppressWarnings("unused")
    public class Parse {
     
        public ArrayList<String> parseur(String url) throws IOException{
     
           ArrayList<String> liste = new ArrayList<String>();
           ArrayList<String> liste2 = new ArrayList<String>();
           ArrayList<String> liste3 = new ArrayList<String>();
     
     
           FileOutputStream out = new FileOutputStream("C:/Documents and Settings/c.bon/git/clinsearch/drugs/src/main/resources/META-INF/test/fichier1.xlsx");
           XSSFWorkbook wb = new XSSFWorkbook();
           XSSFSheet feuille1 = wb.createSheet();
           XSSFRow row = feuille1.createRow(0);
     
           try {
           Document doc = Jsoup.connect(url).get();
     
           Elements denomination = doc.select(".AmmDenomination");
           Elements composition = doc.select(".AmmComposition");
           Elements formepharma = doc.select(".AmmCorpTexte");
     
           / Suppression des éléments "img" /
           Elements delete = doc.select("img").remove();
     
           XSSFRow infos = feuille1.createRow(1);
     
           for(int i = 0; i < denomination.size(); i++) {
                Element elem1 = denomination.get(i);
                liste.add(denomination.text());
                System.out.println(denomination.text());
                }
     
     
           for(int i = 0; i < composition.size(); i++) {
                Element elem2 = composition.get(i);
                liste2.add(composition.text());
                System.out.println(composition.text());
                }
     
     
           for(int i = 0; i < formepharma.size(); i++) {
                Element elem2 = formepharma.get(i);
                liste3.add(formepharma.text());
                System.out.println(formepharma.text());
                }
     
            }
     
            catch (IOException ioExcp)
            {
               System.out.println("Impossible de lire les données : "
                 + ioExcp.getMessage());
            }
           out.close();
        return liste;
     
        }
     
    }




    Classe qui copie les données dans le fichier excel*
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    package net.clinsearch.interne.drugs.parseur;
     
    import java.io.FileOutputStream;
    import java.io.IOException;
     
     
    import java.util.ArrayList;
    import java.util.Iterator;
     
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    public class Copyfile extends Parse{
     
        public void creationxls() throws IOException {
     
            FileOutputStream out = new FileOutputStream("C:/Documents and Settings/c.bon/git/clinsearch/drugs/src/main/resources/META-INF/test/fichier1.xlsx");
            XSSFWorkbook wb = new XSSFWorkbook();
            XSSFSheet sheet = wb.createSheet();
            XSSFRow titre = sheet.createRow(0);
     
            String entete[] = {"CIS", "Denomination", "Composition", "Form pharma", "Indication therapeutiques", "Posologie", "Contre indication", "Mise en garde",
                               "Interraction", "Effet indesirable", "Surdosage", "Pharmacodinamie", "Liste excipients", "Incompatibilité", "Duree conservation",   
                               "Conservation", "Emballage", "Utilisation Manipulation", "TitulaireAMM"};
     
            for(int i=0; i<entete.length; i++ ){
                titre.createCell(i).setCellValue(entete[i]);
            }
     
            //insertion des données dans la feuille excel
     
            XSSFRow data = sheet.createRow(1);
     
            ArrayList<String> list = new ArrayList<String>();
            ArrayList<String> list2 = new ArrayList<String>();
     
            Parse parse = new Parse();
     
     
            XSSFRow line = sheet.createRow(1);
            XSSFRow line2 = sheet.createRow(2);
     
            Iterator<String> it = list.iterator();
            Iterator<String> it1 = list2.iterator();
     
            while (it.hasNext()) {
                String string = (String) it.next();
                line.createCell(1).setCellValue(string);
            }
     
            while (it1.hasNext()) {
                String string = (String) it1.next();
                line2.createCell(1).setCellValue(string);
            }
     
            wb.write(out);
            out.close();
            }    
     
    }



    classe qui execute le tout
    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
     
    package net.clinsearch.interne.drugs.parseur;
     
    import java.io.IOException;
     
    public class Execution {
     
        public static void main(String[] args) throws IOException {
     
            Parse parse = new Parse();
            parse.parseur("http://base-donnees-publique.medicaments.gouv.fr/affichageDoc.php?specid=63915004&typedoc=Rrl");
     
            Copyfile copy = new Copyfile();
            copy.creationxls();
     
        }
     
     
    }
    Ps : je suis debutant java

    merci de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    HTML, associé à CSS, est à la base un format de présentation d'informations. Il a été enrichi par la suite de notion de balisage sémantique, et, on peut parfois avoir des pages dont certains attributs permettent de distinguer les informations (pour des besoins de traitement dynamique en javascript par exemple, ou par une nomenclature plus précise des classes CSS), mais ce n'est pas une obligation, et ce n'est pas le cas de la page dont tu donnes l'URL. Les classes CSS n'étant que des ensembles d'attributs de styles, si plusieurs informations doivent s'afficher de la même façon, il n'est pas étonnant qu'ils aient la même classe, même s'ils ont un sens sémantique différent.

    Pour retrouver les informations qui t'intéressent, il te faut donc utiliser d'autres critères : peut-être ces informations sont-elles dans des sections dont le titre est reconnaissable (une chaîne fixe, ou correspondant à un motif (voir les expressions régulières en Java pour les reconnaitre - classe Pattern).

    Ensuite pour traiter les 13000 pages, il te faut faire une boucle qui génère 13000 url dynamiquement (par concaténation par exemple, en remarquant que chaque page est identifié par des paramètres (specid=63915004&typedoc=Rrl). Il te faut donc connaitre ces paramètres : peut-être une page catalogue te permet-elle d'en avoir une liste, que tu pourras parcourir.

    La question a se poser est "pourquoi dois-tu récupérer des informations de telles pages, alors qu'elles ne sont manifestement pas prévues pour ça ?". Dans quel cadre dois-tu le faire ? Un exercice de TP, un stage en entreprise ? Pourquoi cette page et pas une autre ? On te l'a imposée, ou tu l'as choisie je ne sais comment ? Pourquoi récupérer les informations par extraction depuis le html ? N'existe-t-il pas un catalogue sous forme de fichier structuré facilement exploitable automatiquement ? Peut-être ce fichier existe-t-il et est-il payant, auquel cas, ce serait une façon détournée de faire des économies (pas forcément légale d'ailleurs) ?

    En général, pour traiter des informations, il faut soit qu'il y ait une répétition, un schéma, un format analysable, soit faire de l'analyse syntaxique voire sémantique, ce qui est un boulot pas vraiment abordable pour un débutant, surtout dans le temps imparti.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Enregistrer sous Automatique Fichier Excel depuis macro Autocad
    Par Arno_ap dans le forum Général VBA
    Réponses: 27
    Dernier message: 28/06/2011, 17h13
  2. [Excel] Génération de fichier excel depuis une base de donnée MySQL
    Par wiama dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 26/05/2007, 01h06
  3. importer données fichier excel dans bd mysql
    Par Hydre dans le forum Administration
    Réponses: 1
    Dernier message: 05/10/2005, 19h39
  4. comment fermer un fichier Excel depuis Access?
    Par audrey_desgres dans le forum Access
    Réponses: 14
    Dernier message: 21/06/2005, 12h43
  5. Ouvrir un fichier excel depuis access
    Par ptitegrenouille dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 03/05/2005, 11h47

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