HTMLParser et problème avec le nombre de requètes
Bonjour,
J'utilise la classe HTMLParser (org.htmlparser) pour récupérer des informations sur un site internet.
Mon problème est que je n'arrive pas à utiliser un seul et même parser pour récupérer plusieurs informations sur la page en question !
Je m'explique avec deux exemples :
Code:
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
|
String url;
public MaClasse(String url) {
this.url = url;
}
public void get1() {
try {
Parser parserFiche = new Parser(url);
// Mon premier filtre
NodeFilter filter1 =
new AndFilter(new TagNameFilter("h2"),
new HasParentFilter(new TagNameFilter("td")));
NodeList nl = parserFiche.extractAllNodesThatMatch(filter1);
NodeIterator i = nl.elements();
while(i.hasMoreNodes()) {
Node courant = i.nextNode();
// Boucle sur les différentes réponses
}
} catch (Exception e) {
System.out.println("Erreur : " + e);
}
}
public void get2() {
try {
Parser parserFiche = new Parser(url);
// Mon deuxieme filtre
NodeFilter filter2 =
new AndFilter(new TagNameFilter("html"),
new HasParentFilter(new TagNameFilter("body")));
NodeList nl = parserFiche.extractAllNodesThatMatch(filter2);
NodeIterator i = nl.elements();
while(i.hasMoreNodes()) {
Node courant = i.nextNode();
// Boucle sur les différentes réponses
}
} catch (Exception e) {
System.out.println("Erreur : " + e);
}
} |
Cette méthode fonctionne, mais le problème est que la même page (url) sera appelé plusieurs fois (si je me trompe pas ?????).
Donc si j'ai besoin de 50 infos sur la page (donc 50 méhodes "get"), la page sera récupéré 50 fois, ce qui est plus long, moins logique, et cela "spam" le site web (50 requêtes sur la même page)
C'est pour cela qu'il est plus logique de faire ceci :
Code:
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
|
Parser parserFiche;
public MaClasse(String url) {
this.parserFiche = new Parser(url);
}
public void get1() {
try {
// Mon premier filtre
NodeFilter filter1 =
new AndFilter(new TagNameFilter("h2"),
new HasParentFilter(new TagNameFilter("td")));
NodeList nl = parserFiche.extractAllNodesThatMatch(filter1);
NodeIterator i = nl.elements();
while(i.hasMoreNodes()) {
Node courant = i.nextNode();
// Boucle sur les différentes réponses
}
} catch (Exception e) {
System.out.println("Erreur : " + e);
}
}
public void get2() {
try {
// Mon deuxieme filtre
NodeFilter filter2 =
new AndFilter(new TagNameFilter("html"),
new HasParentFilter(new TagNameFilter("body")));
NodeList nl = parserFiche.extractAllNodesThatMatch(filter2);
NodeIterator i = nl.elements();
while(i.hasMoreNodes()) {
Node courant = i.nextNode();
// Boucle sur les différentes réponses
}
} catch (Exception e) {
System.out.println("Erreur : " + e);
}
} |
Cette façon de faire est bien plus propre et bien plus logique, mais le problème c'est que cela fonctionne pour la première méthode get qui sera appelé, mais dès que l'on appelle une deuxième méthode get (peu importe laquelle) cela ne fonctionne plus (on ne peux pas récupérer une deuxième liste de node avec un autre filtre apparemment).
Si quelqu'un à la moindre information, cela m'intéresse fortement, car je ne sait pas du tout comment cela se fait, et encore moins comment y remédier sans utiliser la première méthode qui fonctionne).
Merci par avance ! Et bonne année à tous !