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"