Autor Tema: Java capturar texto de una web y guardarlo en un archivo TXT copiar página web  (Leído 14965 veces)

oscarcuenca2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola

Estoy buscando información de como capturar la información que suministra un URL  y guardarla en formato TXT para luego poder analizar el dicho texto. Por ejemplo ver cuantas veces aparece una letra, contar el número de palabras, etc...

No quiero capturar el código fuente de la URL sino el resultado que puede mostrar dicha URL. (sin tener que abrir el URL  en una pantalla).

Agradecería si alguien tiene idiea de si existe alguna API relacionada con este tema, o si me puede arientar un poco de como enfocarlo. El objetivo es analizar los resultados que aparecen de una web tras llamar a un URL.

Muchas gracias por anticipado

Un saludo
« Última modificación: 12 de Octubre 2015, 14:12 por Alex Rodríguez »

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Capturar texto de una web y guardarlo en un archivo TXT.
« Respuesta #1 en: 28 de Septiembre 2015, 19:57 »
Yo hice algo parecido era te voy a enviar si por ahí te sirve en java es yo hice para filtrar una cotización de moneda pero vos le cambia nomas la condición y filtra lo que quiera de una pagina web.

Código: [Seleccionar]
package testurl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Testurl {

    public static void main(String[] args) {
        try {
            //se abre la conexiòn
            URL url = new URL("http://www.cambioschaco.com.py/php/chaco_cotizaciones_nuevo.php");
            URLConnection conexion = url.openConnection();
            conexion.connect();

            //Lectura
            InputStream is = conexion.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            char[] buffer = new char[1000];
           //ACA EMPIEZA MI CONDICIÓN DESDE ACÁ PODES CAMBIAR VOS
            int leido;
            String texto = "";
            while ((leido = br.read(buffer)) > 0) {
                String datos = new String(buffer, 0, leido);
                texto += datos;
            }
            String[] tr = texto.split("<tr");
            String fila = "";
            for (String linea : tr) {
                if (linea.contains("Dolar Americano")) {
                    fila = linea;
                }
            }
            String[] td = fila.split("<td");
            String columna = "";
            for (String linea : td) {
                if (linea.contains(",00")) {
                    System.out.println("---> " + linea);
                    int pos1 = 0;
                    int pos2 = 0;
                    String cotizacion = "";
                    for (int i = 0; i < linea.length(); i++) {
                        if (linea.substring(i, i + 1).equals(">")) {
                            pos1 = i;
                        } else if (linea.substring(i, i + 1).equals("<")) {
                            pos2 = i;
                            break;
                        }
                    }
                    System.out.println("---> " + linea.substring(pos1 + 1, pos2));
                }
            }
       //FIN DE LA CONDICION

        } catch (MalformedURLException ex) {
            Logger.getLogger(Testurl.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Testurl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

En el URL le pasa el url de la pagina web que quere filtrar.
ojala que te sirva

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Capturar texto de una web y guardarlo en un archivo TXT.
« Respuesta #2 en: 29 de Septiembre 2015, 11:55 »
Hola Oscar aquí te dejo una referencia válida para PHP

Extraer código fuente de página web con PHP. Leer archivos completos: file_get_contents y nl2br (CU00838B)

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=604:extraer-codigo-fuente-de-pagina-web-con-php-leer-archivos-completos-filegetcontents-y-nl2br-cu00838b&catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193

Saludos

oscarcuenca2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Capturar texto de una web y guardarlo en un archivo TXT.
« Respuesta #3 en: 30 de Septiembre 2015, 10:26 »
Muchas Gracias por la Ayuda-  ;) Os cuento cuando lo tenga como ha quedado el proyecto.

Un saludo.
óscar

oscarcuenca2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola, ya lo tengo.

A continuación dejo aquí el código.

Dentro de él hay una instrucción que no entiendo muy bien. Si alguien me la puede explicar se lo agradeceré-

Instrucción que no entiendo.

fichero.write(new String(buffer, 0, leido));


Código del programa

Código: [Seleccionar]
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class capturas{

public static void main(String[] args) throws IOException{
   
    FileWriter fichero=null;
    try {
fichero = new FileWriter("C:/Users/Propietario/Desktop/prueba.txt");

   

         // Se abre la conexión
         URL url = new URL("http://www.miwebdeejemplo.com");
         URLConnection conexion = url.openConnection();
         conexion.connect();
 
         // Lectura
         InputStream is = conexion.getInputStream();
         BufferedReader br = new BufferedReader(new InputStreamReader(is));
   
         char[] buffer = new char[1000];
         int leido;
         while ((leido = br.read(buffer)) > 0)
         
        //creamos un string explícitamente escribimos
         {
         fichero.write(new String(buffer, 0, leido));
         
         
         }
         
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
    finally {
       if (null!=fichero) fichero.close();
    }
}
}
« Última modificación: 02 de Noviembre 2015, 09:40 por César Krall »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Oscar gracias por pegar el código (por cierto para otra ocasión lee este hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 donde se explica cómo se debe insertar el código en los foros)

La instrucción a que haces referencia

fichero.write(new String(buffer, 0, leido));


Tienes por un lado lo que está dentro del paréntesis: new String(buffer, 0, leido)

Esto es un constructor definido en la clase String del api de java: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

String(char[] value, int offset, int count)
Allocates a new String that contains characters from a subarray of the character array argument. The offset argument is the index of the first character of the subarray and the count argument specifies the length of the subarray. The contents of the subarray are copied; subsequent modification of the character array does not affect the newly created string.


Esto lo que está haciendo es básicamente lo siguiente:

Extrae 1000 caracteres de la página web, o un número inferior si no quedan 1000 caracteres: leido = br.read(buffer)

Cuando ha llegado a extraer todo el contenido ya no hay caracteres y leido=0 con lo cual termina la extracción

Cada paquete de 1000 caracteres lo va escribiendo en el archivo a través de la instrucción fichero.write(new String(buffer, 0, leido));

Para comprender todos los conceptos te recomiendo seguir paso a paso este curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos

 

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".