Retirar Tags

10 respostas
R

Estou tentando fazer um função que pega um pagina HTML e retira todas as tag. Vocês conhecem alguma API que possa me ajudar a fazer isso?

10 Respostas

marciolx

http://java.sun.com/products/jfc/tsc/articles/bookmarks/

http://www.javaalmanac.com/egs/javax.swing.text.html/GetText.html?l=find

ou faz em Python que é mais fácil e depois roda com Jython
:roll:

urubatan

se você ler todo o texto da pagina HTML em uma string, utiliza o seguinte:

html=html.replaceAll("<[/]*?.+?[/]*?>","");

isto vai simplesmente tirar as tags, não substitui
por
nem nada assim, mas vai remover todas as tags, ou seja, remove tudo o que estiver entre <> podendo ter uma / no inicio ou no fim, assim funciona para HTML e XML

R

“marciolx”:

http://www.javaalmanac.com/egs/javax.swing.text.html/GetText.html?l=find
:roll:

Nesse link que tu me passou tem justamente a função que eu preciso, mas não sei porque tem pagina em que ela não funciona

marciolx

“rafaelrneto”:
“marciolx”:

http://www.javaalmanac.com/egs/javax.swing.text.html/GetText.html?l=find
:roll:

Nesse link que tu me passou tem justamente a função que eu preciso, mas não sei porque tem pagina em que ela não funciona

dá alguma Exception?

R

“marciolx”:
“rafaelrneto”:
“marciolx”:

http://www.javaalmanac.com/egs/javax.swing.text.html/GetText.html?l=find
:roll:

Nesse link que tu me passou tem justamente a função que eu preciso, mas não sei porque tem pagina em que ela não funciona

dá alguma Exception?

não, só pega o que está entre as tag <TITLE></TITLE>.

A URL que eu usei para teste foi essa:

http://maae.deinf.ufma.br/temp/infonorma/cadastro.htm

marciolx

é porque ela não tem texto, só form elements, você vai ter que acrescentar os métodos handleStartTag e handleEndTag para pegar texto de atributos de form também (input, option, etc)

R

Mas tem algumas que tem só texto e não funciona. Por exemplo, esta: http://maae.deinf.ufma.br/temp/infonorma/teste.htm

marciolx

ops… pára tudo, muita calma nessa hora :smiley:

o código lança Exception sim, javax.swing.text.ChangedCharSetException, para evitar isso você precisa chamar o método parse:

public void parse(Reader in, HTMLEditorKit.ParserCallback callback, boolean ignoreCharacterSet) throws IOException

do HTMLEditorkit.ParserCallBack com o parâmetro negrito setado para true, mas no exemplo que eu passei com inner classes não sei como fazê-lo, por isso rascunhei um outro que deve funcionar:

import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class MeuParser extends HTMLEditorKit.ParserCallback &#123;

  private Writer out;
  private int level = 0;
  private static StringBuffer buf = new StringBuffer&#40;1000&#41;;
  
  public void handleText&#40;char&#91;&#93; text, int position&#41; &#123; 
    
		buf.append&#40;text&#41;;
		buf.append&#40;'\n'&#41;;

    
  &#125;
  
  public static void main&#40;String&#91;&#93; args&#41; &#123; 
    
 ParserGetter kit = new ParserGetter&#40;&#41;;    
 HTMLEditorKit.Parser parser = kit.getParser&#40;&#41;;
  
    try &#123;
      URL u = new URL&#40;"file&#58;///e&#58;/trab/java/2004/guj/teste.html"&#41;;
      InputStream in = u.openStream&#40;&#41;;
      InputStreamReader r = new InputStreamReader&#40;in&#41;;
      HTMLEditorKit.ParserCallback callback = new MeuParser&#40;&#41;;
      parser.parse&#40;r, callback, true&#41;;
      System.out.println&#40;buf.toString&#40;&#41;&#41;;
    &#125;
    catch &#40;Exception e&#41; &#123;
      System.err.println&#40;e&#41;; 
    &#125;
          
  &#125;
  
&#125;

class ParserGetter extends HTMLEditorKit &#123;

  public HTMLEditorKit.Parser getParser&#40;&#41;&#123;
    return super.getParser&#40;&#41;;
  &#125;
&#125;

PS.: você não viu a Exception porque os catch’s estão vazios :smiley:

R

“marciolx”:
ops… pára tudo, muita calma nessa hora :smiley:

o código lança Exception sim, javax.swing.text.ChangedCharSetException, para evitar isso você precisa chamar o método parse:

public void parse(Reader in, HTMLEditorKit.ParserCallback callback, boolean ignoreCharacterSet) throws IOException

do HTMLEditorkit.ParserCallBack com o parâmetro negrito setado para true, mas no exemplo que eu passei com inner classes não sei como fazê-lo, por isso rascunhei um outro que deve funcionar:

import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class MeuParser extends HTMLEditorKit.ParserCallback &#123;

  private Writer out;
  private int level = 0;
  private static StringBuffer buf = new StringBuffer&#40;1000&#41;;
  
  public void handleText&#40;char&#91;&#93; text, int position&#41; &#123; 
    
		buf.append&#40;text&#41;;
		buf.append&#40;'
'&#41;;

    
  &#125;
  
  public static void main&#40;String&#91;&#93; args&#41; &#123; 
    
 ParserGetter kit = new ParserGetter&#40;&#41;;    
 HTMLEditorKit.Parser parser = kit.getParser&#40;&#41;;
  
    try &#123;
      URL u = new URL&#40;"file&#58;///e&#58;/trab/java/2004/guj/teste.html"&#41;;
      InputStream in = u.openStream&#40;&#41;;
      InputStreamReader r = new InputStreamReader&#40;in&#41;;
      HTMLEditorKit.ParserCallback callback = new MeuParser&#40;&#41;;
      parser.parse&#40;r, callback, true&#41;;
      System.out.println&#40;buf.toString&#40;&#41;&#41;;
    &#125;
    catch &#40;Exception e&#41; &#123;
      System.err.println&#40;e&#41;; 
    &#125;
          
  &#125;
  
&#125;

class ParserGetter extends HTMLEditorKit &#123;

  public HTMLEditorKit.Parser getParser&#40;&#41;&#123;
    return super.getParser&#40;&#41;;
  &#125;
&#125;

PS.: você não viu a Exception porque os catch’s estão vazios :D

Tá funcionando legal. Você não quebrou um galho e sim uma árvore inteira. Valeu!

marciolx

“rafaelrneto”:

Tá funcionando legal. Você não quebrou um galho e sim uma árvore inteira. Valeu!

e o melhor de tudo é que foi no meu 1000º post :mrgreen:

Criado 20 de maio de 2004
Ultima resposta 20 de mai. de 2004
Respostas 10
Participantes 3