Erreur de programmation en java

Fermé
mehdi - 2 mai 2009 à 20:56
 mehdi - 2 mai 2009 à 21:41
Bonjour,
je suis actuellement entrain de concevoir un crawler en java mais comme je ne maitrise pas bien ce langage je bug un peu!
j'ai essayé de le programmé et en le compilant je rencontre quelques erreurs du genre "local variable hides a field" ou encores "cannot find symbol"
voici le programme, si quelqu'un d'entre vous pourrait me dépanner sa serait trés gentil de sa part!




import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.beans.StringBean;
import java.util.Enumeration;
import java.io.IOException;
public class HtmlParser {

// define l'url de site à aspirer
private static final String URLSite = "";
//extensions permises à analyser
private static final Vector ExtensionPermises = new Vector();
static {
ExtensionPermises.add(".html");
ExtensionPermises.add(".htm");
ExtensionPermises.add(".jsp");
ExtensionPermises.add(".php");
ExtensionPermises.add(".aspx");
}

// propriétés de bases
private URL SiteInitial;
private String Domaine;
HashMap URLVisité = new HashMap();
Vector URLaVisité = new Vector();
Vector URLpage = new Vector();
Vector URLp = new Vector();
Vector liste_page = new Vector();
Vector liste_page_f = new Vector();
File fichier = new File("fichier.txt");

int i=0;
// options d'aspiration
private final int maxURLaVisité = 20;
private final boolean MemeDomaine = true;
// verbosity options
private final boolean reduit = true;
private final boolean URLInvalide = false;
private final boolean DomaineInvalid = false;
private final DecimalFormat df;
private String format(String string) { return string.replaceAll("\n", "").replaceAll("\\s+", " ").trim(); }
private String base(URL url) { return url.getProtocol() + "://" + url.getHost() + url.getFile(); }

public HtmlParser(String url) {


// initialisation de propriété de l'aspirateur
try {
SiteInitial = url.startsWith("www.") ? new URL("http://"+url) : new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
URLaVisité.add(SiteInitial);
String[] domain = SiteInitial.getHost().split("\\.");
Domaine = domain[domain.length - 2] + "." + domain[domain.length-1];
StringBuffer format = new StringBuffer();

for (int i = 0; i < maxURLaVisité ; i++) format.append("0");



P.S: C'EST AU NIVEAU DE LA LIGNE CI DESSUS QU'IL M'AFFICHE L'ERREUR: "LOCAL VARIABLE HIDES A FIELD"



df = new DecimalFormat(format.toString());
}

public void run() {

// Aspirer le web
while (URLVisité.size() <= maxURLaVisité && URLaVisité.size() != 0) {
try {
if (URLVisité.get(new URL(base((URL)URLaVisité.get(0)))) == null) visit((URL)URLaVisité.get(0));
} catch (MalformedURLException e) {}
URLaVisité.remove(0);
}

/* if (!reduit) {
System.out.println("");
Set set = URLVisité.entrySet();
Iterator i = set.iterator();
int num = 1;
//while ( i.hasNext() ) {
// Entry entry = i.next();
// System.out.println(df.format(num++) + " url : " + entry.getKey().toString() + " - title : " + format(entry.getValue()));
//}
}*/
}


private void visit(URL url) {

if ( URLVisité.size() >= maxURLaVisité ) return;

String path = url.getPath();
int lastDot = path.lastIndexOf(".");
if(lastDot > 0 && !ExtensionPermises.contains(path.substring(lastDot))) return;
if (url.toString().startsWith("mailto:")) return;
/*
if (MemeDomaine) {
String[] domain = url.getHost().split("\\.");

if ( domain.length < 3 ) return;
if ( !Domaine.equals(domain[domain.length - 2] + "." + domain[domain.length-1])) {
if (reduit && DomaineInvalid)
System.err.println("Not same domain : (" + domain[domain.length - 2] + "." + domain[domain.length-1] +") " + url.toString());
return;
}
}*/
// créer une instance page et ajouter son url et l'url père
page1 p1=new page1();
p1.set(url.toString(),url.getHost());



"ET C'EST AU NIVEAU DES DEUX LIGNES PRECEDENTES QU'IL M'AFFICHE L'ERREUR: "CANNOT FIND SYMBOL"



try {
// extraire le titre de la page et les liens
Parser parser = new Parser(url.toString());
NodeList titreList = parser.parse(new NodeClassFilter (TitleTag.class));
String titre = (titreList.size() != 0) ? ((TitleTag) titreList.elementAt(0)).getTitle() : "";
// extraire le texte de la page
StringBean sb = new StringBean ();
sb.setLinks (false);
sb.setReplaceNonBreakingSpaces(true);
sb.setCollapse(true);
sb.setURL(url.toString());
String s1="rrrrrr" +"\n";
String s = sb.getStrings();

// créer un fichier qui va contenir le text

File monfic = new File ("unfic"+i+".txt");


try {
BufferedWriter sortie = new BufferedWriter(new FileWriter("mots.txt", true));
sortie.write("fichier \n");
sortie.write("unfic"+i+".txt"+"\n");

} catch (IOException ex) {
Logger.getLogger(HtmlParser.class.getName()).log(Level.SEVERE, null, ex);
}
try {
FileWriter infic = new FileWriter(monfic);

infic.write(s);
} catch (IOException ex) {
Logger.getLogger(HtmlParser.class.getName()).log(Level.SEVERE, null, ex);
}


i++;



parser.reset();
NodeList list = parser.parse (new NodeClassFilter (LinkTag.class));
// l'URL est noté comme visité
URLVisité.put(new URL(base(url)), titre);
/*if (reduit)*/ System.out.println(df.format(URLVisité.size()) + " url : " + url.toString() + " - titre : " + format(titre) + "- contenu :\n" + s);

//else System.out.print(".");
// saisir le nouveau lien à visiter
for (int i = 0; i < list.size(); i++) {
LinkTag tag = (LinkTag) list.elementAt(i);
if (tag.getAttributeEx("href") == null || tag.getAttributeEx("href").getValue().equals("#")) continue; // ignore "#" href
String href = tag.extractLink();
try {
URL urlFound = new URL(href);
// tous les url des pages externes au site
if (!urlFound.getHost().equalsIgnoreCase(url.getHost()))
{
System.out.println("---------------");
System.out.println(urlFound.getHost());
System.out.println(url.getHost());
System.out.println("---------------");
System.out.println("******---------------*******");
System.out.println(URLp.contains(urlFound));
System.out.println("******---------------******");

// Si la page a été déja crée Alors modifier le compteur nombre de liens entrants
if (URLp.contains(urlFound))
{
// parcourir la liste pour recupérer la page
for (Enumeration e = liste_page.elements() ; e.hasMoreElements() ;)
{
page1 pp = (page1) e.nextElement();

if (pp.get_url().equalsIgnoreCase(urlFound.toString()))
{
System.out.println("************ Modification ********");
System.out.println(pp.get_url());
// modifier la page et la remplacer dans la liste
liste_page.remove(pp);
pp.set_n_liens(pp.get_nbl()+ 1);
liste_page.add(pp);
System.out.println(pp.get_nbl());
}
}

}
// in créer la page
else
{
page1 p2=new page1();
p2.initialiser(urlFound.toString(),urlFound.getHost().toString(),1);
URLp.add(urlFound);
liste_page.add(p2);
//liste_page_f.add(p2);
}
}
if (URLVisité.get(new URL(base(urlFound))) == null)
{
URLaVisité.add(urlFound);

}
} catch (MalformedURLException e) {
if (reduit && URLInvalide) System.err.println("invalid url : " + href + " " + format(list.elementAt(i).toHtml()));
}
}
} catch (ParserException e) {
System.err.println(e.getLocalizedMessage());
} catch (MalformedURLException e) {}


}
public HashMap get_hmp(){
return URLVisité;
}
public void affiche()
{
System.out.println("***************** les pages **********");
for (Enumeration e = liste_page.elements() ; e.hasMoreElements() ;)
{ page1 pp = (page1) e.nextElement();
System.out.println(pp.get_url());
System.out.println(pp.get_nbl());

}
System.out.println("***************** les pages **********");

}
}


}




vous n'auriez pas une petite indication s'il vous plait?
merci d'avance
A voir également:

3 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
2 mai 2009 à 21:03
Tu peux nous faire le plaisir de mettre ton code en un bloc entre les balises <code > et </code > (sans les espaces avant le >).

Car là on ne sait pas trop ce qui est le code et ce qui est le texte, avec des trucs gras et autres.

Eventuellement met en commentaire tes remarques dans le code.

Merci
0
ok pas de probleme, voici le code:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.beans.StringBean;
import java.util.Enumeration;
import java.io.IOException;
public class HtmlParser {
    
 // define l'url  de site à aspirer
        private static final String URLSite = "";
        //extensions  permises à analyser
        private static final Vector ExtensionPermises = new Vector();
        static {
               ExtensionPermises.add(".html");
               ExtensionPermises.add(".htm");
               ExtensionPermises.add(".jsp");
               ExtensionPermises.add(".php");
               ExtensionPermises.add(".aspx");
                }

        //  propriétés de bases
        private URL SiteInitial;
        private String Domaine;
        HashMap URLVisité = new HashMap();
        Vector URLaVisité = new Vector();
        Vector URLpage = new Vector();
        Vector URLp = new Vector();
        Vector liste_page = new Vector();
        Vector liste_page_f = new Vector();
          File fichier = new File("fichier.txt");
   
        int i=0;
        //  options d'aspiration
        private final int maxURLaVisité = 20;
        private final boolean MemeDomaine = true;
        // verbosity options
        private final boolean reduit = true;
        private final boolean URLInvalide = false;
        private final boolean DomaineInvalid = false;
        private final DecimalFormat df;
        private String format(String string) { return string.replaceAll("\n", "").replaceAll("\\s+", " ").trim(); }
        private String base(URL url) { return url.getProtocol() + "://" + url.getHost() + url.getFile(); }

        public HtmlParser(String url) {
            
            
                // initialisation de propriété de l'aspirateur
                try {
                        SiteInitial = url.startsWith("www.") ? new URL("http://"+url) : new URL(url);
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                }
                URLaVisité.add(SiteInitial);
                String[] domain = SiteInitial.getHost().split("\\.");
                Domaine = domain[domain.length - 2] + "." + domain[domain.length-1];
                StringBuffer format = new StringBuffer();
                for (int i = 0; i < maxURLaVisité ; i++) format.append("0"); 
                df = new DecimalFormat(format.toString());
        }

        public void run() {
           
                // Aspirer le web
                while (URLVisité.size() <= maxURLaVisité && URLaVisité.size() != 0) {
                        try {
                                if (URLVisité.get(new URL(base((URL)URLaVisité.get(0)))) == null) visit((URL)URLaVisité.get(0));
                        } catch (MalformedURLException e) {}
                        URLaVisité.remove(0);
                }

               /* if (!reduit) {
                        System.out.println("");
                        Set set = URLVisité.entrySet();
                        Iterator i = set.iterator();
                        int num = 1;
                        //while ( i.hasNext() ) {
                               // Entry entry = i.next();
                              //  System.out.println(df.format(num++) + " url : " + entry.getKey().toString() + " - title : " + format(entry.getValue()));
                        //}
                }*/
        }


        private void visit(URL url) {

                if ( URLVisité.size() >= maxURLaVisité ) return;

                String path = url.getPath();
                int lastDot = path.lastIndexOf(".");
                if(lastDot > 0 && !ExtensionPermises.contains(path.substring(lastDot))) return;
                if (url.toString().startsWith("mailto:")) return;
              /*
                if (MemeDomaine) {
                        String[] domain = url.getHost().split("\\.");

                        if ( domain.length < 3 ) return;
                        if ( !Domaine.equals(domain[domain.length - 2] + "." + domain[domain.length-1])) {
                                if (reduit && DomaineInvalid)
                                        System.err.println("Not same domain : (" + domain[domain.length - 2] + "." + domain[domain.length-1] +") " + url.toString());
                                return;
                        }
                }*/
              // créer une instance page et ajouter son url et l'url père
              page1 p1=new page1();
              p1.set(url.toString(),url.getHost());
                try {
                        // extraire le titre de la  page  et les liens
                        Parser parser = new Parser(url.toString());
                        NodeList titreList = parser.parse(new NodeClassFilter (TitleTag.class));
                        String titre = (titreList.size() != 0) ? ((TitleTag) titreList.elementAt(0)).getTitle() : "";
                        // extraire le texte de la page
                        StringBean sb = new StringBean ();
                        sb.setLinks (false);
                        sb.setReplaceNonBreakingSpaces(true);
                        sb.setCollapse(true);
                        sb.setURL(url.toString());
                        String s1="rrrrrr" +"\n";
                        String s = sb.getStrings();
                        
                     // créer un fichier qui va contenir le text
                   
                File monfic = new File ("unfic"+i+".txt");
               
                
                       try {  
BufferedWriter sortie = new BufferedWriter(new FileWriter("mots.txt", true));
sortie.write("fichier \n"); 
sortie.write("unfic"+i+".txt"+"\n"); 

                } catch (IOException ex) {
                Logger.getLogger(HtmlParser.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                FileWriter infic = new FileWriter(monfic);
                
                infic.write(s);
            } catch (IOException ex) {
                Logger.getLogger(HtmlParser.class.getName()).log(Level.SEVERE, null, ex);
            }
                
          
                 i++;
              
          
                     
                        parser.reset();
                NodeList list = parser.parse (new NodeClassFilter (LinkTag.class));
                //  l'URL est noté comme visité
                URLVisité.put(new URL(base(url)), titre);
                /*if (reduit)*/ System.out.println(df.format(URLVisité.size()) + " url : " + url.toString() + " - titre : " + format(titre) + "- contenu :\n" + s);

                //else System.out.print(".");
                // saisir le nouveau lien à visiter
            for (int i = 0; i < list.size(); i++) {
                    LinkTag tag = (LinkTag) list.elementAt(i);
                    if (tag.getAttributeEx("href") == null || tag.getAttributeEx("href").getValue().equals("#")) continue; // ignore "#" href
                    String href = tag.extractLink();
                    try {
                            URL urlFound = new URL(href);
                            // tous les url des pages externes au site
                            if (!urlFound.getHost().equalsIgnoreCase(url.getHost()))
                            {
                             System.out.println("---------------");
                              System.out.println(urlFound.getHost());
                              System.out.println(url.getHost());
                             System.out.println("---------------");
                             System.out.println("******---------------*******");
                             System.out.println(URLp.contains(urlFound));
                                 System.out.println("******---------------******");

                             // Si la page a été déja crée Alors modifier le compteur nombre de liens entrants
                              if (URLp.contains(urlFound))
                              {
                                 // parcourir la liste pour recupérer la page
                                for (Enumeration e = liste_page.elements() ; e.hasMoreElements() ;)
                                {
                                  page1 pp = (page1) e.nextElement();

                                  if (pp.get_url().equalsIgnoreCase(urlFound.toString()))
                                  {
                                    System.out.println("************ Modification ********");
                                    System.out.println(pp.get_url());
                                   // modifier la page et la remplacer dans la liste
                                    liste_page.remove(pp);
                                    pp.set_n_liens(pp.get_nbl()+ 1);
                                    liste_page.add(pp);
                                    System.out.println(pp.get_nbl());
                                  }
                                }

                              }
                              // in créer la page
                              else
                              {
                                page1 p2=new page1();
                                p2.initialiser(urlFound.toString(),urlFound.getHost().toString(),1);
                                URLp.add(urlFound);
                                liste_page.add(p2);
                                //liste_page_f.add(p2);
                              }
                            }
                            if (URLVisité.get(new URL(base(urlFound))) == null)
                            {
                              URLaVisité.add(urlFound);

                            }
                                } catch (MalformedURLException e) {
                                        if (reduit && URLInvalide) System.err.println("invalid url : " + href + " " + format(list.elementAt(i).toHtml()));
                                }
            }
        } catch (ParserException e) {
                System.err.println(e.getLocalizedMessage());
        } catch (MalformedURLException e) {}


        }
public HashMap get_hmp(){
  return URLVisité;
}
public void affiche()
{
  System.out.println("***************** les pages **********");
        for (Enumeration e = liste_page.elements() ; e.hasMoreElements() ;)
                                        {	page1 pp = (page1) e.nextElement();
                                          System.out.println(pp.get_url());
                                          System.out.println(pp.get_nbl());

                                        }
       System.out.println("***************** les pages **********");

}
}


}






les erreurs se trouvent dans les lignes qui sont en gras, la premiére etant "local variable hides a field" et la deuxiéme: "cannot find symbol"
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
2 mai 2009 à 21:38
Navrée mais je n'ai pas le import org.htmlparser.* et j'aurais donc du mal a regarder ton code de plus prêt en l'éxecutant chez moi.

Bonne chance quand même, il y en aura surement d'autres qui passeront ici.
0
merci comme meme d'avoir essayé c'est trés gentil de votre part.
0