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

11 respostas
alexeyh

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

11 Respostas

Rodrigo_Carvalho_Aul

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

[]'s

Rodrigo C. A.

tiagosilveira

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) &gt;= 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 );
    }
}

}

M

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

tiagosilveira

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

M

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

tiagosilveira

hehehe sem problema imaginei isso…

ciczan

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");
    }
}
alexeyh

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");
    }
}
ciczan

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

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

W

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

Criado 20 de abril de 2006
Ultima resposta 2 de set. de 2007
Respostas 11
Participantes 6