Autor Tema: Expresiones regulares Java regex buscar un patrón en una web y guardar fichero  (Leído 4090 veces)

xeta21

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Hola :) Tengo el siguiente programa:

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class getTag2Html {

public static void main (String[] args) throws IOException {
String tag = "<p>";

                URL web = new URL("http://www.insalfonscostafreda.cat/web/");
//comprobar que hi hagi dos paràmetres a l'entrada

                System.out.println("Busquem a : "+web + " l'etiqueta p");
// patró de cerca regexp
String pattern = "<" + tag + ".*\\/?>";

//Iniciem la connexió
web.openConnection();

        BufferedReader in = new BufferedReader( new InputStreamReader(web.openStream()));

        File f = new File("eac2.xml");
        BufferedWriter bw;
        bw = new BufferedWriter(new FileWriter(f));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
           
            if(inputLine.contains(tag)) {
               
                System.out.println(inputLine);
                bw.write(inputLine + "\n");
            }
        }
        bw.close();
        in.close();
}
}


lo que no sé es como usar la parte:

String pattern = "<" + tag + ".*\\/?>";

el programa me funciona perfectamente pero tengo que usar esta parte y no sé como incorporarla..

gracias!
« Última modificación: 24 de Junio 2018, 20:13 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:duda ejercicio con regex!
« Respuesta #1 en: 24 de Junio 2018, 20:12 »
Buenas, para escribir en los foros deben seguirse las indicaciones que se dan en https://aprenderaprogramar.com/foros/index.php?topic=1460.0 donde se explica cómo poner título a los temas, cómo pegar código, etc.

Si no se tienen las bases de Java fundamentales recomendamos seguir el curso Java desde cero: https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

En el código indicado lo que se usa es una expresión regular para buscar un patrón dentro de una cadena de texto (en este caso dentro del código html de una página web). Para interpretar la expresión regular tenemos que:

String pattern = "<" + tag + ".*\\/?>";

La cadena comienza por "<" seguida del tag indicado. En este caso debemos poner simplemente p o simplemente h2 (según lo que queramos buscar), porque si pones String tag ="<p>" estarías repitiendo dando lugar a que se buscara <<p> lo cual no es correcto.

Por tanto pondríamos String tag = "p"; ó String tag = "h2"; por ejemplo.

Luego el . indica "cualquier carácter". El * es un metacarácter que se usa para indicar que el carácter anterior ocurre cero o una o más de una vez. Es decir, cualquier número de veces. Por tanto tenemos ya <h2> Cualquier cantidad de caracteres

\\ es la cadena de escape o backslah en las expresiones regulares de Java.

? indica ocurrencia ninguna o una vez. Es decir, que podría existir el carácter / ninguna o una vez.

Hay mucha información sobre expresiones regulares en Java en internet.

Haciendo esta pequeña modificación del código:

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class getTag2Html {

   public static void main (String[] args) throws IOException {
      String tag = "h2";
     
                URL web = new URL("http://www.insalfonscostafreda.cat/web/");
      //comprobar que hi hagi dos paràmetres a l'entrada
     
                System.out.println("Buscando en : "+web + " la etiqueta h2");
         // patró de cerca regexp
         String pattern = "<" + tag + ".*\\/?>";

         //Iniciem la connexió
      web.openConnection();

        BufferedReader in = new BufferedReader( new InputStreamReader(web.openStream()));

        File f = new File("prueba_apr_eac2.xml");
        BufferedWriter bw;
        bw = new BufferedWriter(new FileWriter(f));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
           
            if(inputLine.contains(tag)) {
               
                System.out.println(inputLine);
                bw.write(inputLine + "\n");
            }
        }
        bw.close();
        in.close();   
   }
}

He obtenido este resultado:

Buscando en : http://www.insalfonscostafreda.cat/web/ la etiqueta h2
h1, h2, h3, h4, h5, h6, .site-title {
<h2 class="item-title" itemprop="headline">
</h2>
<h2 class="item-title" itemprop="headline">
</h2>
<h2 class="item-title" itemprop="headline">
</h2>
<h2 class="item-title" itemprop="headline">
</h2>
<h2 class="item-title" itemprop="headline">
</h2>
<h2 class="item-title" itemprop="headline">
</h2>
<h2 class="item-title" itemprop="headline">
</h2>




Además como en el código está definido que se cree un archivo xml donde se guarden estos resultados, se ha creado dicho archivo.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".