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!
// 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();
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);
2 mai 2009 à 21:16
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"