Como ler o código fonte de uma URL específica? [RESOLVIDO]

Bem…a uma primeira impressão essa pergunta já foi respondida aqui…mas ainda não foi…pelo menos já procurei muito aqui no fórum e não achei!

Meu caso é o seguinte:

Preciso fazer um método que:

  1. vai receber uma URL
  2. a partir dessa URL vai precisar LER o conteúdo HTML dela;
  3. com esse conteúdo (basicamente são tables html) gravar numa coleção e posteriormente num banco.

Meu problema está justamente nos 02 primeiros passos. Principalmente no 2o.

Considerações: a URL em questão é essa aqui: http://www.tibia.com/community/?subtopic=character&name=Ravell+Nevah

E eu teria de ler o conteúdo da tabela html com as descrições do personagem em questão.

Agradeço antecipadamente a atenção de vcs!

Um abraço,
Alexey

Use o httpClient da apache:
http://jakarta.apache.org/commons/httpclient/

[]'s

Rodrigo C. A.

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>&quot;, &quot;&quot;);
	        teste = teste.replaceAll(&quot;%3F&quot;, &quot;?&quot;);
	        teste = teste.replaceAll(&quot;%3D&quot;, &quot;=&quot;);
	        teste = teste.replaceAll(&quot;%26&quot;, &quot;&&quot;);
	        teste = teste.replaceAll(&quot;%2B&quot;, &quot;+&quot;);
	        while (teste.indexOf(t1) &gt;= 0){   
	    	    resulteste = teste.substring(teste.indexOf(t1) + t1.length(),teste.indexOf(t2));
	    	    teste = teste.replaceFirst(t1, &quot;&quot;);
	    	    teste = teste.replaceFirst(t2, &quot;&quot;);
	    	    System.out.println(resulteste);
	    	    resultado.println(resulteste);
	        }
	    }
	    resultado.close();
        writer.close();
	    rd.close();
	    
	    if (pag == 1000) {
	        JOptionPane.showMessageDialog(null,&quot;Acabou a Pesquisa&quot;,&quot;Atenção&quot;,
	                						JOptionPane.WARNING_MESSAGE);
	        System.exit(0);
	    }
		System.out.println (&quot;Scaniando.... &quot;+ pag);
	    ScanAllTheWeb.Conecta(pag + 10);
	    
	} catch (UnknownHostException ioe) {
	    System.out.println(&quot;Falha ao conectar no servidor... Verifique sua conexao!!! &quot;);
        JOptionPane.showMessageDialog(null, &quot;Falha na conexão com o servidor. Você pode estar desconectado ou o servidor pode estar fora do ar.&quot;, &quot;Atenção&quot;,
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 ); 
	} catch (ArrayIndexOutOfBoundsException ioe) {
        System.out.println(&quot;ArrayIndexOutOfBoundsException: &quot; + ioe);
        JOptionPane.showMessageDialog(null, &quot;Operação Ilegal... Entre em contato com o suporte..&quot;, &quot;Contate o Suporte&quot;, 
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 ); 
	} catch (IndexOutOfBoundsException e ) {
	    
	    ScanAllTheWeb.Conecta(pag + 10);
    
	} catch (ConnectException ioe) {
        System.out.println(&quot;Connection timed out: Conexão congestionada!!&quot;);
        JOptionPane.showMessageDialog(null, &quot;Conexão congestionada. Time out&quot;, &quot;ERRO&quot;,
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (SocketException e) {
        System.out.println(&quot;SCAN INTERRONPIDO... VERIFIQUE SUA CONEXAO.&quot;);
        JOptionPane.showMessageDialog(null, &quot;Falha na sua conexão com a internet. Reinicie o aplicativo.&quot;, &quot;Atenção&quot;,
                						JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (OutOfMemoryError e) {
        System.out.println(&quot;SCAN TERMINADO... VERIFIQUE O RESULTADO...&quot;);
        JOptionPane.showMessageDialog(null, &quot;Scan Finalizado!!! OutOfMemory&quot;, &quot;Compre um PC Novo ou mais memória&quot;, 
				JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (NullPointerException e) {
        System.out.println(&quot;NullPointerException: &quot; + e);
        JOptionPane.showMessageDialog(null, &quot;Operação Ilegal... Entre em contato com o suporte..&quot;, &quot;Contate o Suporte&quot;, 
                						JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    } catch (IOException ioe) {
        System.out.println(&quot;IOException: &quot; + ioe);
        JOptionPane.showMessageDialog(null, &quot;Erro Informe a o Criador do programa o erro encontrado para que ele seja corrigido&quot;, &quot;ERRO&quot;,
										JOptionPane.WARNING_MESSAGE);
        System.exit( 0 );
    }
}

}

Também pode ser usada a classe java.net.URL… que por sinal o tiagosilveira usou… :stuck_out_tongue:

E exatamente essa classe que estou usando no meu exemplo aqui!!!

Pois eh… eh qdo falei… seu codigo não estava postado… por isso comentei…

hehehe sem problema imaginei isso…

Taí um exemplinho bem simples:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

/**
 *
 * @author cicero
 */
public class LeURL {
    
    public static void sugaHTML(String urlSt) throws MalformedURLException, IOException {
        URL url = new URL(urlSt);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String linha = "";
        while ((linha = reader.readLine()) != null)
            System.out.println(linha);
        reader.close();
    }
    
    public static void main(String[] args) throws MalformedURLException, IOException {
        sugaHTML("http://www.tibia.com/community/?subtopic=character&name=Ravell+Nevah");
    }
}

Puxa vida!

Acho q melhor ajuda eu não poderia ter tido!

Muito obrigado pelas respostas de todos…e qdo eu já tinha terminado de baixar a biblioteca indicada pelo Rodrigo Carvalho (a httpClient do Jakarta), vi o exemplinho pronto do ciczan! hehe :slight_smile:

Mas valeu a pena ter baixado a httpClient.

Enfim…terminei utilizando o exemplo do Ciczan…MAS…ocorreu um erro (401). Que me dei conta de estar na empresa e aqui possuir um proxy.
Este erro diz respeito à autorização necessária.

Por isso, está ocorrendo o seguinte erro:

java.io.IOException: Server returned HTTP response code: 401 for URL: http://www.tibia.com/community/?subtopic=character&name=Ravell+Nevah
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:814)
	at java.net.URL.openStream(URL.java:913)
	at lerURL.sugaHTML(lerURL.java:15)
	at lerURL.main(lerURL.java:24)
Exception in thread "main" 

Se não for pedir demais…alguém poderia me dar uma forcinha?

Acho que oq eu preciso é autenticar a aplicação no proxy…

Testei com outra URL na intranet e funcionou. E o próprio Cícero testou na casa dele e funcionou tb.

Tentei fazer umas coisas aqui mas não consegui…daí resolvi pedir ajuda a vcs novamente!

Obrigado de novo!

Um abraço,
Alexey

PS: O código “final” ficou assim:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

/**
 *
 * @author cicero
 */
public class lerURL {
    
    public static void sugaHTML(String urlSt) throws MalformedURLException, IOException {
        URL url = new URL(urlSt);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String linha = "";
        while ((linha = reader.readLine()) != null)
            System.out.println(linha);
        reader.close();
    }
    
    public static void main(String[] args) throws MalformedURLException, IOException {
        		sugaHTML("http://www.tibia.com/community/?subtopic=character&name=Ravell+Nevah");
    }
}

O teste funcionou aqui pra mim.

O erro 401 é quando vc não tem autorização pra ver a página. Mais info em http://www.checkupdown.com/status/E401.html

Olá! Bem…consegui resolver!

Peguei um exemplo de como identificar o proxy aqui mesmo no GUJ, na thread:
http://www.guj.com.br/posts/list/30881.java

E o código final, pra quem se interessar, ficou assim:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.lang.System;
import java.util.Properties;

/**
 *
 * @author cicero
 */
public class lerURL {
    
    public static void sugaHTML(String urlSt) throws MalformedURLException, IOException {
		   //pegas as propriedades do sistema
	       Properties systemProperties = System.getProperties();
	 
	       // seta a propriedade proxy
	       systemProperties.put("proxyHost","meuproxy");
	       //seta a porta 
	       systemProperties.put("proxyPort","8080");
	
	       //seta o uso do proxy
	       systemProperties.put("proxySet","true");
		
		URL url = new URL(urlSt);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String linha = "";
        while ((linha = reader.readLine()) != null)
            System.out.println(linha);
        reader.close();
    }
    
    public static void main(String[] args) throws MalformedURLException, IOException {
    sugaHTML("http://www.tibia.com/community/?subtopic=character&name=Ravell+Nevah");
    }
}

Bem…é isso! Agora o resto é comigo!

Obrigado a todos que colaboraram!

Um abraço,
Alexey

[quote=alexeyh]Olá! Bem…consegui resolver!

Peguei um exemplo de como identificar o proxy aqui mesmo no GUJ, na thread:
http://www.guj.com.br/posts/list/30881.java

E o código final, pra quem se interessar, ficou assim:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.lang.System;
import java.util.Properties;

/**
 *
 * @author cicero
 */
public class lerURL {
    
    public static void sugaHTML(String urlSt) throws MalformedURLException, IOException {
		   //pegas as propriedades do sistema
	       Properties systemProperties = System.getProperties();
	 
	       // seta a propriedade proxy
	       systemProperties.put("proxyHost","meuproxy");
	       //seta a porta 
	       systemProperties.put("proxyPort","8080");
	
	       //seta o uso do proxy
	       systemProperties.put("proxySet","true");
		
		URL url = new URL(urlSt);
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String linha = "";
        while ((linha = reader.readLine()) != null)
            System.out.println(linha);
        reader.close();
    }
    
    public static void main(String[] args) throws MalformedURLException, IOException {
    sugaHTML("http://www.tibia.com/community/?subtopic=character&name=Ravell+Nevah");
    }
}

Bem…é isso! Agora o resto é comigo!

Obrigado a todos que colaboraram!

Um abraço,
Alexey[/quote]