viernes, 30 de abril de 2021

Desarrollar un Crawler simple con Python

 


Para poder desarrollar el Crawler con Python lo primero que debemos hacer es instalar la librería llamada scrapy. Esta librería la podemos instalar usando pip. Con esta librería ya instalada vamos a crear un documento de Python llamado simpleCrawler.py

Dentro de este documento vamos a crear una clase llamada Crawler 

import scrapy

class Crawler(scrapy.Spider):
    name = 'SimpleCrawler'
    start_urls = ['https://crawler-test.com/']

    def parse(self, response):

        links = response.xpath("//a")
        for link in links:
            link = link.xpath("@href").extract()
            print(link)
            yield

Como podemos observar lo primero que vamos tener es el import de la librería scrapy luego vamos a heredar a la clase Crawler scrapy.Spider.

En este caso el código es muy simple. Le vamos a dar un nombre al crawler con la variable name y luego le pasamos el URL que deseamos escanear con la variable start_urls.

Luego definimos una función que se llama parse que espera como parámetro el response de la carga del url.

Como podemos observar la variable links contiene todos los elementos de tipo anchor de la página que escaneamos.

Después de esto dentro del ciclo vamos encontrando cada uno de los Urls que tiene el sitio web y lo imprimimos para mostrarlo en el console.

Para poder ver el resultado debemos correr el siguiente comando scrapy runspider simpleCrawler.py

Esto nos da como resultado



Etiquetas: , , , ,

jueves, 29 de abril de 2021

Desarrollar un Crawler simple con Java

 


Lo primero que vamos a hacer es crear un proyecto nuevo basado en Maven



Al proyecto le vamos a asignar el nombre de SimpleCrawler



Le tenemos que dar al botón de finalizar. Con esto listo vamos a necesitar una librería que la tenemos que agregar al proyecto usando Maven. La librería se llama jsoup.



Jsoup Url: https://jsoup.org/download

Con esto listo ya podemos hacer el código para escanear la página web.

package com.mycompany.simplecrawler;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            var url = "https://crawler-test.com/";
            
            Document doc = Jsoup.connect(url).get();
            Elements links = doc.select("a[href]");
            for(Element link: links){
                System.out.println(link.attr("href"));
            }
        } catch (IOException ex) {
           System.err.println(ex);
        }
    }
    
}

Como podemos observar en el código lo primero que debemos hacer es importar las librerías de jsoup necesarias

·         import org.jsoup.Jsoup;

·         import org.jsoup.nodes.Document;

·         import org.jsoup.nodes.Element;

·         import org.jsoup.select.Elements;

Luego vamos a crear una variable llama Url donde podemos agregar la pagina que deseamos escanear. Después de esto creamos un objeto de tipo Document con el que vamos a obtener el documento encontrado del url, usando el método get que vamos a usar del método connect de la clase Jsoup.

Después de esto creamos un objeto de tipo Elements llamado links basado en la búsqueda que deseamos hacer como se puede observar con el objeto doc.select. En este caso preguntamos por todos los anchores que tengan una referencia.

Finalmente, con un ciclo for podemos recorrer el resultado de links con todas las posibles url o links que se encontraron. Finalmente se imprimen en la consola para poder ver que fue lo encontrado.

Lo que nos da como resultado lo siguiente 




Etiquetas: , ,

miércoles, 21 de abril de 2021

Desarrollar un Crawler simple con C#

 

Lo primero que tenemos que hacer es un proyecto nuevo con Visual Studio. En mi caso vamos a usar Visual Studio 2019. El proyecto lo vamos a desarrollar usando C#. Vamos a hacer un Console app el cual le vamos a llamar SimpleCrawler.



El proyecto va a hacer. netcore 3.1

Cuando el proyecto esta listo vamos a buscar en NuGet el paquete HtmlAgilityPack y lo vamos a instalar. 



Con este paquete instalado lo primero que vamos a hacer en la clase Main es importar las librerías necesarias para crear nuestro crawler


Ahora vamos a ver como se construye el código para ir navegando en el contenido de la página web. 



Ahora, en la línea 12 tenemos que copiar el URL de la página web que deseamos escanear. Con esto vamos a crear un cliente Http para leer el documento web como se puede ver en la línea 14. Ya en la línea 16 obtenemos el contenido del documento de Html. Este al final lo podemos obtener como si fuera una variable string.

Ahora si ya con esto listo en la línea 18 creamos un objeto de tipo HtmlDocument del paquete AgilityPack. El cual nos va a permitir convertir el documento que tenemos de tipo string a un objeto de tipo AgilityPack. Esto lo cargamos en la línea 19.

Para poder leer todos los links usamos la línea 21 el cual usa el document que creamos anteriormente y cargamos todos los nodos. De estos nodos que cargamos vamos a seleccionar únicamente los anchor (links).

En la línea 23 vamos a recorrer todos los resultados encontrados en la línea 21 y vamos a ir uno por uno mostrando el contenido de cada uno de estos. Usando la propiedad OuterHtml que tenemos en la línea 24.

Lo que nos da como resultado lo siguiente 



Aquí podemos ver todos los links que tiene la página web. Ahora cada uno podría hacer lo que necesita con estos links.

Podemos recordar que con este paquete podemos buscar cualquier tipo de nodo que tenemos en los sitios web.

¿Qué es un Crawler? 


Etiquetas: , , ,

jueves, 4 de febrero de 2021

¿Qué es un website Crawler?

 


Esto es una aplicación o software que se desarrolla con el fin de escanear o analizar páginas web. Este lo podemos usar para extraer datos específicos de los sitios web como títulos, palabras calve, descripción o información para entender de que trata la pagina y de alguna manera poder agruparla o clasificarla.

Existen muchas aplicaciones en línea o descargables que nos permiten escanear paginas web y clasificar o extraer datos. Esto nos permite de alguna manera encontrar información que se necesita sin tener que usar nuestro propio tiempo para analizar los diferentes sitios web.

Por ejemplo, si existe algún sitio web que tiene una cantidad ilimitada de paginas web, ya que estas se crean de manera dinámica y queremos extraer alguna información especifica como el precio de algunos productos podemos crear este tipo de aplicaciones y encontrar el patrón para generar el llamado de las diferentes paginas web para poder encontrar el precio. Esto podría tardar horas, hasta días dependiendo del sitio web, pero con un software que escanee la página web no tenemos que estar esperando o nosotros revisando de manera manual estos documentos web.

Existen muchos datos que son públicos que necesitamos, pero no tienen una estructura simple para poder clasificar u organizar para lo que necesitamos por lo que podemos crear un sistema que se encargue de leer todo el contenido e inicie a clasificar y organizar esta información para generar un resultado correcto o deseado.

Otro ejemplo es que si ocupamos encontrar páginas que contengan cierta palabra clave para identificar cuales son las que deseamos poner atención. Si nos tocara hacer alguna investigación o leer algunas páginas web con algún tema particular podemos usar un software de este tipo para encontrar únicamente lo que realmente necesitamos.

Como se menciono anteriormente se puede buscar alguna aplicación de las que existen para crear nuestros sistemas de escaneo o podemos desarrollar nuestro propio sistema de escaneo. Claro que el segundo va a requerir un poco de tiempo para poder entender como funciona o que datos tiene el sistema. Ya que lo que al final vamos a tener que interpretar son todos los contenidos que llegar por medio del html. Puede que existan cosas muy especificas que requiere que nosotros tengamos que desarrollar nuestro propio sistema de escaneo y además no es tan difícil crear un simple sistema para esto por lo que nos podríamos ahorrar algo de dinero en licencias o mensualidades de este tipo de aplicaciones.

En conclusión, con palabras muy simple el crawler es una aplicación que nos permite leer y analizar páginas web con el fin de entender e interpretar mucho mejor los datos que contienen estas aplicaciones o paginas web. Usando palabras claves, elementos de html o contenido especifico que deseamos encontrar.

Ejemplo Java

Ejemplo C#

Ejemplo Python

Etiquetas: , , ,

martes, 4 de agosto de 2020

Python para Data Analysis



Después de usar lagunas herramientas para el estudio de datos como RapidMinder y R me parece que Python es mucho más fácil y rápido para el estudio de datos.  Por supuesto R es una gran herramienta que no debemos menospreciar.

Vamos a ver que se necesita para iniciar con el análisis de datos con Python. Podemos hacer dos cosas descargar anaconda que ya tiene varios frameworks para el análisis de datos o podemos instalar Python y luego continuar con la instalación de las otras librerías.

Primero debemos descargar Python https://www.python.org/downloads/ tiene que buscar la versión que aplica para su sistema operativo. En mi caso estoy usando Windows. Tenemos que agregar una variable en el Home para Python. Después de esto podemos correr Python en el cmd


Esto nos mostrara la versión de Python que tenemos instalado y nos permite asegurarnos que los instalamos correctamente.

Ahora debemos verificar que versión de pip tenemos. En el cmd debemos digitar “pip –version”


Pip en Windows se debió haber instalado cuando se instalo Python, pero se podría actualizar si fuera necesario.

Ahora tenemos que instalar algunas librerías que son necesarias para nuestro análisis de datos.

1.       Numpy

2.       Pandas

3.       Matplotlib

4.       Scipy

5.       Scikit-learn

Estas librerías las vamos a instalar usando PIP con el siguiente comando desde cmd.

“pip install panda”

Ahora solamente se debe cambiar el nombre de la librería que se desea instalar. Cuando terminamos con las librerías vamos a usar el comando “pip freeze” con el fin de ver si tenemos todas las librerías necesarias instaladas.

A continuación, vamos a instalar Jupyter Note para poder ejecutar nuestras operaciones de Python. Se puede usar con otros IDEs pero realmente Jupyter es muy fácil y tiene muy buenas características para hacer nuestro trabajo limpio y rápido.

Igual que las otras librerías tenemos que correr pip install jupyter. Cuando lo tenemos instalados vamos a correr en el cmd “jupyter notebook” esto nos abre nuestro editor de texto para Python.

De esta forma podemos ver nuestro código de Python


Ya estamos listos para trabajar con nuestros proyectos de datos

Regresar


Etiquetas: , , , ,

viernes, 29 de mayo de 2020

JDK 14 Switch

Con JDK14 tenemos otra forma de usar la operación switch para seleccionar entre diferentes opciones. Esta es una característica preview, por lo que tenemos que asegurarnos de marcarla de esta manera para poder ejecutarla.  

Lo primero que vamos hacer es un proyecto nuevo con Apache Netbeans, donde vamos a tener el ejemplo de como podemos ver el switch en el JDK 8 y como se podría hacer con el JDK 14.

Como vemos tenemos una variable con el dato suministrado por el usuario. Para nuestro ejemplo que tipo de música le gusta.

Como estamos acostumbrados podemos ver el case el valor posible que selecciona el usuario, seguido de dos puntos. Esta sentencia nos permite tener un bloque de código donde agregamos las acciones del programa a seguir si es la opción elegida. Como podemos ver en la línea 27. Luego de esto simplemente agregamos un break para terminar nuestro switch.

Ahora como podríamos hacerlo en JDK14

La sintaxis es muy diferente pero el resultado es el mismo. Se ve más simple y fácil de leer. Cada uno de los posibles escenarios (case) van seguidos de -> con la instrucción que deseamos ejecutar si se selecciona una opción en particular.

Ejemplo

Etiquetas: , , , , ,

martes, 13 de agosto de 2019

Publicar un sitio web en Azure usando Visual Studio 2019


Con Azure podemos publicar sitios web pequeños sin costo si no es problema usar los URLs que da Azure. En caso de que queramos agregar un nombre de dominio ya tendríamos que pagar, pero se pueden usar para hacer pruebas o si no es problema usar un dominio de Azure podemos dejarlos así de manera gratuita.

Lo primero que vamos a hacer es crear un proyecto nuevo de tipo Razor MVC en Visual Studio 2019 (si no saben cómo hacer uno, pueden ver este blog)

Cuando ya tenemos listo con el proyecto debemos ir al portal de Azure usando nuestras credenciales.
Dentro del portal de Azure vamos a buscar la opción App Services para poder crear nuestro sitio web.

Se puede usar el campo de texto para buscar también esta opción.

Cuando damos clic vamos a ver otra venta con las opciones para crear nuestro sitio web.

Lo siguiente es dar clic al botón de Add

Luego del botón add vamos a ver la siguiente ventana

Aquí debemos seleccionar el runtime que deseamos correr, la región, el nombre de nuestro sitio web y podemos seleccionar que el plan es gratis para no tener que pagar por este sitio web. Ahora solo debemos esperar un momento que nuestro sitio web se termine de construir.

Cuando nuestro sitio web esté listo vamos a dar clic sobre el para ir a ver sus propiedades.

Dentro de las propiedades del sitio web vamos a poder el siguiente menú de opciones. En este punto lo que tenemos que hacer es dar clic al botón Get publish profile, lo que nos permite descargar un archivo de configuración para poder crear el perfil de publicación en VS2019.

Cuando se termine la descarga nos tenemos que dirigir a VS2019. Sobre nuestro proyecto vamos a dar clic derecho y buscamos la opción de Publish.

Con lo que podremos ver la siguiente ventana. En este punto debemos dar clic sobre el botón import Profile y simplemente buscamos el archivo que descargamos de Azure para poder publicar nuestro sitio web.

Finalmente, aparecerá una ventana con la opción de publicar

Simplemente dando clic al botón de Publish y esperar que el proceso termine podremos ver nuestro sitio web publicado en Azure, listo para ser utilizado.






Etiquetas: , , , , ,

viernes, 9 de agosto de 2019

Visual Studio 2019 – Crear Proyecto de Web MVC


Para hacer un proyecto web usando VS2019 podemos utilizar la versión gratuita con la que no vamos a tener ningún problema y se puede desarrollar todo tipo de proyecto.

Al momento de abrir VS2019 vamos a ver la siguiente ventana


Al lado izquierdo vamos a tener los proyectos recientes en los que hemos trabajado y al lado derecho las opciones para crear o descargar proyectos con lo que deseamos trabajar. Para este ejemplo vamos a dar clic al botón de “Create a new project” para iniciar nuestro proyecto web.

Después de esto vamos a ver la siguiente ventana


Ahora debemos dar clic sobre el tipo de proyecto que dice ASP.Net Core Web Application. Con esta opción seleccionado ya podemos dar clic al botón de next.


En este momento debemos de darle el nombre al proyecto que deseamos desarrollar. Además, de seleccionar el folder donde vamos a guardar nuestro nuevo proyecto.

Ya estamos listos para dar clic al botón de Create.

La siguiente ventana que vamos a ver seria esta


En esta ventana vamos a poder seleccionar la versión del .Net Core que queremos utilizar para correr nuestra aplicación, entre otros formatos que le podemos dar. En este caso vamos a seleccionar el que dice Web Applciation (Model-View-Controller). Finalmente, damos clic al botón Create. Ahora esperamos que VS2019 termine de construir nuestro proyecto.


Cuando este proceso termina ya estamos listos para trabajar en nuestra nueva aplicación web.


Otros artículos que pueden ser de su interés

Etiquetas: , , , , , , , ,

miércoles, 10 de julio de 2019

¿debemos usar la nube para publicar nuestras aplicaciones?


Dónde y cómo podemos publicar nuestras aplicaciones web. Ahora todo el mundo esta hablando de la nube y sus excelentes características. Las cuales yo no puedo ignorar, pero en muchos casos queremos publicar una pequeña aplicación web y la pregunta que todos nos podríamos hacer es si realmente debemos usar la nube siempre.

La nube tiene mucho poder, herramientas, flexibilidad y otras características. Yo he trabajado con Azure, AWS y algunas pocas cosas con Google Cloud. Por lo que, sin ninguna duda digo que la nube es un excelente lugar para desarrollar aplicaciones y dejar de instalar todo en la empresa. Sin embargo, considero que para pequeñas y medianas aplicaciones web (claro con un estudio de rendimiento, etc) podemos usar los conocidos web hosting.

Dependiendo de los requerimientos sale mucho más económico que el uso de la nube. Y bueno aclaro para aplicaciones pequeñas. A pesar de que muchos de estos cobran una tarifa fija mensual o anual si vemos los costos de manera individual por el uso de servicios en la nube nos podría salir más económico para nuestras aplicaciones web.

Existen muchos proveedores de este servicio. Particularmente mochahost me parece que tienes planes muy accesibles para empresas que están iniciando. Tienen planes para aplicaciones .net y Java.

Es buscar y ver cual paquete se ajusta más a las necesidades de nuestras aplicaciones web. Algunos de estos paquetes incluyen instalación ilimitada de dominios y subdominios. Cantidad ilimitada de bases de datos tanto en MySql como en SQLServer. Se puede crear cuentas de correo de manera ilimitada y enviar correos de manera gratuita.

Cuenta con software de terceros que se pueden instalar de manera fácil como carritos de compra, sistemas de administración de contenido, etc.

Claro la nube ofrece capas gratuitas, las cuales son por algún tiempo u otras con algunas limitaciones. Como dije anteriormente para una empresa pequeña y mediana puede que esto se ajuste más a su presupuesto. Pero todo depende de hacer un buen análisis costo/beneficio.

Sin duda la nube tiene un potencial increíble y herramientas que ofrecen hacer aplicaciones muy interesantes, pero cuando estamos iniciando puede que no ocupamos todo eso. Con el paso del tiempo podemos ir integrando más de nuestros servicios a la nube.

Etiquetas: , , , , , ,