Olá Alexeyh,
A muito tempo atraz fiz um filtrador de link pro site alltheweb. E acho que o código dele pode ajudar…
/**
- Classe .
- 
- @see
- 
- 
@since JDK1.4.2
- 
- 
@author Tiago Silveira
 /
 import java.net.;
 import java.io.*;
import javax.swing.JOptionPane;
class ScanAllTheWeb {
static String busca;
public static void main (String[] args) throws Exception {
    try {
//          Deleta o arquivo se ele existir
File del = new File(“RESULTADO.txt”);
del.delete();
        ScanAllTheWeb all = new ScanAllTheWeb();
        busca = JOptionPane.showInputDialog(null, "Procurar pelo oque?", "AllTheWeb V1.0",
                								JOptionPane.QUESTION_MESSAGE);
        busca = busca.replaceAll(" ","+");
        System.out.println("Voce esta procurando por: "+busca);
	    System.out.println("O RESULTADO SERA GRAVADO NO DIRETORIO ONDE ESTA O PROGRAMA");
	    System.out.println("COM O NOME RESULTADO.TXT");
        all.Conecta(0);
    } catch (NullPointerException e) {
        JOptionPane.showMessageDialog(null, "Operação Cancelada", "AllTheWeb V1.0 - Atenção",
				JOptionPane.WARNING_MESSAGE);
        System.exit(0);
    }
}
public static void Conecta(int pag) throws Exception {
    try {
        FileWriter writer = new FileWriter(new File("RESULTADO.txt"),true);
        PrintWriter resultado = new PrintWriter(writer);
        
	    URL u = new URL ("http://www.alltheweb.com/search?cat=web&cs=utf8&q="+ busca +"&rys=0&_sb_lang=any&o="+ pag +"");
	    //System.out.println (u);
	    URLConnection conn = u.openConnection(); 
	    InputStream is = conn.getInputStream(); 
	    BufferedReader rd = new BufferedReader (new InputStreamReader (is)); 
	    String line;
	    String t1 = "<span class=\"resURL\">http://";
	    String t2 = "  </span>";
	    String teste;
	    String resulteste;
	    while ((line = rd.readLine())!= null) { 
	        //System.out.println (line);
	        teste = line;
	        teste = teste.replaceAll("<b>", "");
	        teste = teste.replaceAll("</b>", "");
	        teste = teste.replaceAll("%3F", "?");
	        teste = teste.replaceAll("%3D", "=");
	        teste = teste.replaceAll("%26", "&");
	        teste = teste.replaceAll("%2B", "+");
	        while (teste.indexOf(t1) >= 0){   
	    	    resulteste = teste.substring(teste.indexOf(t1) + t1.length(),teste.indexOf(t2));
	    	    teste = teste.replaceFirst(t1, "");
	    	    teste = teste.replaceFirst(t2, "");
	    	    System.out.println(resulteste);
	    	    resultado.println(resulteste);
	        }
	    }
	    resultado.close();
        writer.close();
	    rd.close();
	    
	    if (pag == 1000) {
	        JOptionPane.showMessageDialog(null,"Acabou a Pesquisa","Atenção",
	                						JOptionPane.WARNING_MESSAGE);
	        System.exit(0);
	    }
		System.out.println ("Scaniando.... "+ pag);
	    ScanAllTheWeb.Conecta(pag + 10);
	    
	} catch (UnknownHostException ioe) {
	    System.out.println("Falha ao conectar no servidor... Verifique sua conexao!!! ");
        JOptionPane.showMessageDialog(null, "Falha na conexão com o servidor. Você pode estar desconectado ou o servidor pode estar fora do ar.", "Atenção",
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 ); 
	} catch (ArrayIndexOutOfBoundsException ioe) {
        System.out.println("ArrayIndexOutOfBoundsException: " + ioe);
        JOptionPane.showMessageDialog(null, "Operação Ilegal... Entre em contato com o suporte..", "Contate o Suporte", 
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 ); 
	} catch (IndexOutOfBoundsException e ) {
	    
	    ScanAllTheWeb.Conecta(pag + 10);
    
	} catch (ConnectException ioe) {
        System.out.println("Connection timed out: Conexão congestionada!!");
        JOptionPane.showMessageDialog(null, "Conexão congestionada. Time out", "ERRO",
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (SocketException e) {
        System.out.println("SCAN INTERRONPIDO... VERIFIQUE SUA CONEXAO.");
        JOptionPane.showMessageDialog(null, "Falha na sua conexão com a internet. Reinicie o aplicativo.", "Atenção",
                						JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (OutOfMemoryError e) {
        System.out.println("SCAN TERMINADO... VERIFIQUE O RESULTADO...");
        JOptionPane.showMessageDialog(null, "Scan Finalizado!!! OutOfMemory", "Compre um PC Novo ou mais memória", 
				JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (NullPointerException e) {
        System.out.println("NullPointerException: " + e);
        JOptionPane.showMessageDialog(null, "Operação Ilegal... Entre em contato com o suporte..", "Contate o Suporte", 
                						JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (IOException ioe) {
        System.out.println("IOException: " + ioe);
        JOptionPane.showMessageDialog(null, "Erro Informe a o Criador do programa o erro encontrado para que ele seja corrigido", "ERRO",
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    }
}
}