Foros del Web » Programación para mayores de 30 ;) » Java »

Extraer enlaces HTML

Estas en el tema de Extraer enlaces HTML en el foro de Java en Foros del Web. Buenas, Estoy realizando una aplicación que gestiona la búsqueda y descarga de podcasts. Para la búsqueda, necesito extraer los enlaces, para ello utilizo el HTMLEditorKit ...
  #1 (permalink)  
Antiguo 17/02/2010, 05:08
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 16 años, 5 meses
Puntos: 0
Extraer enlaces HTML (resuelto)

Buenas,
Estoy realizando una aplicación que gestiona la búsqueda y descarga de podcasts. Para la búsqueda, necesito extraer los enlaces, para ello utilizo el HTMLEditorKit y extraigo las etiquetas <A> de la siguiente forma:

(El parámetro de entrada es el documento html convertido en string.)
Código:
public static LinkedList getLinks(String texto) {

           LinkedList result = new LinkedList();
           try
           {
               HTMLEditorKit kit = new HTMLEditorKit();
               HTMLDocument doc = (HTMLDocument)kit.createDefaultDocument();
               doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
               StringReader sr = new StringReader(texto);
               kit.read(sr, doc, 0);

               HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
               
               while (it.isValid())
               {                   
                    SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes();                    
                    String link = (String)s.getAttribute(HTML.Attribute.HREF);
                    if (link != null) {
                        // Agregamos el resultado a la lista
                        if(link.indexOf("localhost")<=0) {
                            result.add(link);
                        }//if
                    }//if
                    it.next();
                }//while
           }//try
           catch (Exception ex)
           {
               System.out.println(ex);
               return null;
           }//catch
           return result;
    }//getLinks
Pero cuando quiero extraer los enlaces de tipo <LINK> la función retorna null.

He comprobado si (HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);) it tenía algún valor pero es nulo, así que ahí está el problema pero no sé cómo solucionarlo.
He mirado en google pero todos los ejemplos están hechos con la etiqueta <A>.

Un saludo y gracias de antemano

Última edición por SeNNiNG; 21/02/2010 a las 10:19
  #2 (permalink)  
Antiguo 17/02/2010, 05:24
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 15 años, 6 meses
Puntos: 10
Respuesta: Extraer enlaces HTML

Wenas

No he visto nada de esto, pero buscando por la web, me sale un tal HTMLEditorKit.Parser.

Código:
// Create empty HTMLDocument to read into
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument)htmlKit.createDefaultDocument();
// Create parser (javax.swing.text.html.parser.ParserDelegator)
HTMLEditorKit.Parser parser = new ParserDelegator();
// Get parser callback from document
HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);
// Load it (true means to ignore character set)
parser.parse(reader, callback, true);
Siendo reader un Reader (BufferedReader, StringReader, ...)

Saludos.

Pd. Se e olvido donde lo he visto http://www.jguru.com/faq/view.jsp?EID=4370
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #3 (permalink)  
Antiguo 17/02/2010, 05:35
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 18 años, 10 meses
Puntos: 51
Respuesta: Extraer enlaces HTML

Has probado a cambiar..
Cita:
doc.getIterator(HTML.Tag.A);
por
Cita:
doc.getIterator(HTML.Tag.LINK);
?
S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 17/02/2010, 05:37
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Extraer enlaces HTML

El ejemplo que puse era para A. Pero con LINK es donde me retorna null.
  #5 (permalink)  
Antiguo 21/02/2010, 10:19
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Extraer enlaces HTML

Bueno a base de darle vueltas y vueltas y probar cosas he dado con la solución.
El problema estaba en la linea:

Código PHP:
SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes(); 
que para el caso de las etiquetas <a> funcionaba correctamente, pero en los enlaces <link> saltaba una ClassCastException. El valor retornado por it.getAttributes() en este caso no es del tipo SimpleAttributeSet (aunque no sé muy bien por qué) sino que es un AbstractDocument.AbstractElement.

La solución es la siguiente:

Código PHP:
AbstractDocument.AbstractElement s = (AbstractDocument.AbstractElement)it.getAttributes(); 

Etiquetas: enlaces, extraer, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.