Buenas, estoy intentando hacer un programa que coja todas los links "internos" que contenga una web
www.elpais.es..., por ejemplo. El caso es que lo tengo hecho para que extraiga los links de una web determinada. Pero ahora me toca implementarlo de manera recursiva. El caso es que el mismo programa metido en una función que retorne la lista de links de una web en concreta falla(a pesar de que compila bien), mientras que si lo lanzo dentro del main lo hace perfectamente.
Es la primera vez que uso java asi que no se cual puede ser el error.
Código PHP:
import java.io.*;
import java.net.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.util.*;
import java.lang.String;
import java.util.List;
import java.lang.Object;
import java.io.FileWriter;
import java.lang.String;
class GetLinks {
public static void main(String[] args) {
List <String> NodosV = new ArrayList <String>();
String semillas = args[0];
String NextURL;
String webs = args[1];
try{
FileWriter links = new FileWriter("Link.txt",true);
NodosV = CojerLinks(semillas, webs);
while (NodosV.isEmpty()==false){
NextURL = NodosV.get(0);
NodosV.remove(0);
links.write(NextURL);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
static List CojerLinks (String semilla, String web){
EditorKit kit = new HTMLEditorKit();
Document doc = kit.createDefaultDocument();
//List NodosN = new ArrayList<String>();
//NodosV<String> list = new ArrayList<String>();
List <String> NodosV = new ArrayList <String>();
List <String> NodosN = new ArrayList <String>();
String URL;
String NextURL;
// La clase documento no maneja todavia apropiadamente los caracteres.
doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
try {
// Creamos un Reader de contenido HTML
Reader rd = getReader(semilla);
// Parsea el HTML
kit.read(rd, doc, 0);
// Nos movemos atraves de los elementos del documento HTML
ElementIterator it = new ElementIterator(doc);
javax.swing.text.Element elem;
while ((elem = it.next()) != null) {
SimpleAttributeSet s = (SimpleAttributeSet)
elem.getAttributes().getAttribute(HTML.Tag.A);
if (s != null) {
URL=s.getAttribute(HTML.Attribute.HREF).toString();
if (URL.contains(web)){
NodosN.add(URL);
}
else {
if (URL.contains("www.")==false && URL.length()>5){
NodosN.add("http://"+web+URL);
//System.out.println("http://"+semilla+URL);
}
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
//Iterator iter = NodosN.iterator();
//while (iter.hasNext())
// System.out.println(iter.next());
while (NodosN.isEmpty()==false){
NextURL = NodosN.get(0);
NodosN.remove(0);
//System.out.println(NextURL);
if(NodosV.contains(NextURL)==false){
NodosV.add(NextURL);
}
}
return NodosV;
//System.exit(1);
}
// Retornamos un Reador de los datos HTML. Si 'uri' comienza con 'http:'
// entonces se trata como una URL; de otra forma se asume que es un fichero local
static Reader getReader(String uri) throws IOException {
if (uri.startsWith("http:")) {
// Recuperamos de Internet
URLConnection conn = new URL(uri).openConnection();
return new InputStreamReader(conn.getInputStream());
}
else {
// Recuperamos de fichero local
return new FileReader(uri);
}
}
}
Gracias por adelantado