Erreur de programmation en java

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
Configuration: Windows XP
Firefox 3.0.10

3 réponses

  1. merci comme meme d'avoir essayé c'est trés gentil de votre part.
    1. 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.
      1. 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
        1. 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"