Scraping web

Iniciado por Oggy, Septiembre 27, 2015, 01:21:41 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Septiembre 27, 2015, 01:21:41 PM Ultima modificación: Septiembre 27, 2015, 02:46:25 PM por WhiZ
    Tiempos que no pasaba por acá a postear algo, recordé que en uno de los foros en los que aportaba había dejado algo interesante que quiza a algún visitante de éste foro le agradaría ver.
    Debido a que el tutorial estuvo enfocado a una comunidad distinta corregí algunas palabras para hacerlo más presentable en undercode.



    Hoy les presentaré un tutorial de cómo sacar datos de algún sitio web sin tener que programar, además de ello les mostraré un ejemplo práctico, el ejemplo que daré será crear un auto publicador de chistes en twitter.

    Muchas veces necesitamos información de un sitio web pero este no tiene alguna api ni sus datos accesibles vía json o alguna forma que nos de acceso a su información, normalmente usamos algún tipo de herramienta en algún lenguaje como php,js u otro para jalar la información, pero.. qué pasa con la gente normal o personas que tenemos conocimientos intermedios de programación? se nos vuelve un dolor de cabeza.
    De las herramientas que conozco para scraping normalmente uso xpath y una que otra librería en php, aveces me enojo tanto por ser tan complicada la tarea que termino olvidándome de lo que tenía en mente, bueno esto se terminó cuando conocí a Kimono
    Sí, Kimono y no la prenda de vestir sino una herramienta la cual nos permite que cualquier tipo de sitio web el cual tenga contenido pueda ser scrapeado en tan solo unos pocos y fáciles pasos.

De qué nos sirve Kimono?

Nos sirve para evitarnos el problema de programar algún script que nos saque cierta información de un sitio web o bien evitar pagarle a alguien para que haga esta tarea.

Imaginen este escenario que además traeré a la vida muy facilmente...
Queremos usar la api de twitter para publicar desde ella en nuestro twitter con alguna librería en php pero lo que queremos publicar está en un sitio web en especifico y se actualiza a cada rato, además de ello no queremos estar publicando o modificando el script a mano...
Pues fácil y sencillo, usamos kimono para Scrapear la data que queremos de la web, pasarsela a algún lenguaje y si la data es dinámica, osea se actualiza usamos un motor de base de datos para alojarla en una base de datos propia (por si queremos usar mucho mejor la data scrapeada)
como motor de bases de datos muchos usamos mysql, así que en éste tutorial en el ejemplo que presentaré usaré ese motor de base de datos.


Requerimientos

Scrapear cualquier web desde kimono -> Cualquiera puede hacerlo, no requiere conocimientos especiales.

Manejar los datos scrapeados(sacados de la web) -> Kimono ya trae una manera de usar la data que recolectamos, o bien si deseas más libertad necesitas un nivel de lengaje de programación intermedio, aconsejo Js,php,python...

Crear la app de twitter, combinarla con kimono y php para crear un autopublicador con Kimono php y un cron job -> Nivel de php intermedio

Bueno como decía mi abuela, primero la primaria les presentaré kimono, para ello nos dirijimos a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  Es la página oficial de kimono, nos registramos desde: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



nos dirijimos a el apartado learn y buscamos la sección donde nos proveen la extención de chrome :



Acá les dejo el link directo de la chrome extención: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Se la bajan y tendrán en su navegador algo similar:



Listo, ya estamos listos para empezar a sacar la información de el sitio que queramos vamos a ello!

El ejemplo que daré será Sacar los chistes de un website.


Explico: Property1, vendría siendo el nombre de cada información que saquemos de la web, ejemplo estamos en la página de chistes, yo sólo quiero sacar los chistes y nada más, cómo le llamaremos? pues chistes, si estan por ejemplo en un sitio web de noticias, podés llamar a cada propiedad por un nombre como: título,autor,contenido, así cuando Kimono te pase la info en el Formato Json pues no te vas a perder con la data que extrajiste.

Guardas el proyecto y estas listo para empezar.



[LIST=1]
  • Nombre del proyecto
  • Tags, hace referencia a el uso que le darás a la api
  • Intervalo de tiempo en el que Kimono actualizará la info
  • Si la página tiene paginación y hay más info kimono screapea esas páginas, especificas cuantas páginas deseas scrapear.
Luego se van a la página principal de kimono y desde su cuenta se dirigen a su apis.



Después de irse al apartado de sus apis creadas, se desplegará la info de su api.



Muestra información como nombre de su api, cuándo kimono volverá a jalar información nueva de la página scrapeada, información de errores,aciertos de la api y otras hiervas más.

No eres programador y quieres usar la data que sacaste de la web?

Este apartado enseñaré la manera más fácil dónde no se requiere saber programar en ningún lenguaje para manipular la data que scrapeaste, crearemos una app con kimono dónde desplegaremos toda la información.

En su cuenta tendrán un apartado llamado App builder, se usará para crear una app en la cual usaremos la información de la web que scrapeamos.
Link directo para crear la app: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Enlazarán su app con la data scrapeada, kimono les ofrecerá esa opción, después de ello escogen el estilo que desean para su app y tendrán una app con data actualizable de el sitio web scrapeado.



El link de este ejemplo pueden verlo acá: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

También los que no les interesa o no saben programar en algún lenguaje tienen otra opción de embeder su app en wordpress o a un sitio web, acá más info: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Creando app en twitter y combinándola con kimono, php y un Cron job

Cualquiera puede hablar y presentar un tutorial Basándose en simples teorías que quieren venir a ofrecerte algo sin haber sido probado, éste tutorial pretende enseñarte lo que yo mismo he aprendido y de una manera fácil, sin suposiciones ni nada por el estilo, en el ejemplo que yo daré usaré la api que creamos y la combinaremos con la api de twitter y una librería en php más un cron job que nos permitirá twittear nuestros chistes automáticamente.

Requerimientos: Saber php, entusiasmo e imaginación.

conexion.php

Código: php
<?php

$db = mysqli_connect("host","user","pass","bd");

if($db){
    echo "conectado";
}else{
    echo "No te has conectado hay un problema";
}


chistes.php
Código: php
<?php

error_reporting(0);

require("conexion.php");
include("TwitterAPIExchange.php");



$hora = date("i"); // minutos para escojer qué chiste se enviará a twitter

$nm = mysqli_query($db,"select * from chistes where id = $hora"); //recojemos el chiste y depende de la hora/minuto o lo que tengas programado se publicarán un diferente chiste de la base de datos

$um = mysqli_fetch_assoc($nm); //iniciamos la función para traer el chiste de la bd

$pop = $um["chiste"];


//Logica para enviar los datos a twitter con su libreria

$settings = array(
    'oauth_access_token' => "Tu token",
    'oauth_access_token_secret' => "Tu token secreto",
    'consumer_key' => "tu llave ",
    'consumer_secret' => "tu consumer secret"
);

$url = "https://api.twitter.com/1.1/statuses/update.json";

$postdata = array(

'status' => $pop //chiste pasado a la libreria para que sea enviado a twitter


);

$metodo = "POST";

$twitter = new TwitterAPIExchange($settings);

echo $twitter->setPostfields($postdata)
             ->buildOauth($url,$metodo)
             ->performRequest();


También necesitarán la api de twitter en php, TwitterAPIExchange, la bajan desde acá No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Para crear tu app en twitter se van a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Crean su app, le dan permisos de lectura y escritura.

Para poder guardar los chistes de kimono a la bd yo hice esto: Recorrí los datos con un foreach anidado, así al finalizar el foreach anidado me enviaba los datos a mi bd:

Logica para enviar mis datos de kimono a mi bd:

Código: php
<?php
require("conexion.php");
$request = "https://www.kimonolabs.com/api/77rvy8e2?apikey=Bbx40LCzP5mlQFEtUW0PLbChLDJ4YWeZ"; //Nuestra api kimono en formato json
$response = file_get_contents($request); //Obtener el código de la api
$results = json_decode($response, TRUE); //Decodificar el json de la api


//foreach anidado para obtener el chiste
foreach ($results as $key => $value) {
   

    foreach ($value as $clave => $valor) {
       
        foreach ($valor as $culo => $fluflu) {
           

            foreach ($fluflu as $wea => $nono) {
               
                $insertar = $nono["text"]; //asignamos a $insertar los chistes y se recorren todos con el foreach anidado

                mysqli_query($db,"insert into chistes(id,chiste) values('','$insertar')"); //consulta sql para insertar los chistes
            }
        }
    }
}


Creando un cron job para automatizar los tweets

Con un cron job se nos facilitará la vida y la publicación de tweets automáticos, en éste ejemplo estamos usando los chistes que sacamos de la web de chistes y después de haberlos acomodado en la api de kimono los pasamos a nuestra bd, ahora realizaremos el cron job.
esta vez no usaré ningún cpanel sino que usaré un servicio gratuito que nos dejará crear un cron job y ejecutar nuestro script cada cierto tiempo, nos iremos a: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta se registran y se dirigen a el area de members, ahí estarán los detalles de sus cron jobs creados, si no tienen ni uno no les saldrá nada, se irán a "Cron jobs" y crearán uno nuevo:



Configuran a gusto su cron job, en mi ejemplo lo pondré que se ejecute cada 1 minuto para demostrarles que funcionan los tuits automáticos.



Después de haberlo dejado unos minutitos corriendo este fue el resultado:



Podés jugar con los caracteres, ya ves que se lia un poco con las eñes y otros caracteres, esto se soluciona cambiando el charset y teniendo un poco de lógica en php.

Todas nuestras apis pasan a servirse en un json, podés usar json desde casi cualquier lenguaje de programación.
Puedo darles ideas,: Sacar las listas de alguna web de anime, sacar las listas de una web de pelis, sacar la información diaria de algun sitio web de noticias, ya saben que kimono actualiza su api automáticamente así que solo tienen que scrapear una sola vez, kimono también permite scrapear secciones dónde te pide logueo, en la documentación que dejaré explican cómo hacerlo.

Documentación oficial de kimono en videos: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (Mejor vean los tutoriales con viemeo, aconsejado.)

Documentación completa: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

qué es scraping: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Saludos 8)!

Fantástico aporte hermano!
Muchas gracias!

Saludos!
ANTRAX