Tutorial: Crear un pequeño BOT [Extraer información de webs]

  • Autor Autor Negocios del Web
  • Fecha de inicio Fecha de inicio
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Negocios del Web

Negocios del Web

Épsilon
Hospedaje
Verificación en dos pasos activada
Crear un pequeño BOT [Extraer información de webs] [1/2]

Hola a todos 🙄. Antes de nada quiero aclarar que este pequeño tutorial es 100% mio y no ningún copypaste. Realizado especialmente para Forobeta.


Ese tutorial es para guiar un poco sobre como realizar dicho tutorial, claro esta que no con ese tutorial se podrá extraer todo sin problemas Empezamos...

Requisitos:

  • Conocimientos muy basicos de PHP
  • Conocimientos muy basicos de CSS
  • Class de PHP llamada "simplehtmldom"

Primero nos descargamos la class desde su web y la añadimos en nuestra carpeta de trabajo. Después quedamos un index.php (por ejemplo) ya que desde ahí trabajaremos.

Primero añadimos la class con require_once y todo seguido vamos a añadir set_lime_time(0) para que en ese script no haya tiempo limite de ejecución.

¿Por que?: Como es obvio no todas las web's tienen el mismo contenido una puede tener 4 o 5 entradas o 2.000 entradas. Por defecto php deja de funcionar con un fatal error si sobrepasa los 30 segundos de ejecución. Dejándolo a cero podrá trabajar todo el tiempo el bot sin que se pare la ejecución. Por ejemplo: Para extraer miles de películas es obligatorio dejar ilimitado el tiempo de ejecución para que trabaje el tiempo que necesite.

Después de eso añade un cuerpo html para configurar el meta charset. Nos quedara a si:

Enlace eliminado

Ahora vamos a crear 1 variable con una función para extraer la información: $web = file_get_html('http://www.marca.com/');. Como podéis ver vamos a hacer el ejemplo extrayendo información deportiva de la website "Marca.com".

En este ejemplo es necesario añadir un patrón con expresión regular entonces yo he añadido otra variable con un patron que explicare mas adelante: $expresion = "^http://";

¿Que hace la función file_get_html?: Extrae el DOM(Document Object Model) o Codigo de fuente de la website.

Quedando a si:
Enlace eliminado

Ahora llega lo interesante, para este ejemplo quiero extraer el titular y la información de todas las noticias. La librería simplehtmldom extraer información mediante elementos CSS, tranquilo no te asustes vamos a ello.

Para extraer la información que hay dentro de la noticia primero hay que extraer el enlace para entrar a cada articulo, para ello vamos revisar donde esta ese enlace mediante el código de fuente. Yo utilizo Enlace eliminado (F12) para examinar el código de fuente de manera ordenada.

En este ejemplo para acceder a la noticia hay que dar click al h2 de la noticia breve.

Enlace eliminado

Ahora toca mirar el lado del código de fuente estudiando el código de fuente de este ejemplo solo se utiliza el h2 para el titulo de la entrada entonces procedemos a hacer la extracción de información.

Explicación breve:: La class simplehtmldom tiene una función llamada find que se utiliza para mediante un tag buscar información: Ejemplo: $web->find("h2").

Vamos a buscar todos los h2 sin hacer filtro por class ya que todos los h2 son el titular de la web.

Enlace eliminado

Como podemos ver en la foto dentro del h2 esta lo que necesitamos el anchor para ello realizamos la misma operación que la anterior para buscar los "a" dentro de los "h2" y imprimimos el resultado para ver como va quedando.

Explicación breve:: Para extraer un tag en concreto por ejemplo el href es tan sencillo como: Ejemplo: $web->href.

Quedando a si:

Enlace eliminado

Y ya podemos ver resultados por pantalla. Le he añadido un <br> para que se visualicen bien los enlaces.

Enlace eliminado

Ya se visualizan resultados aunque hay algunos que no me interesan que son los que empiezan por http://. Recordar que anterior mente he añadido un patrón para que los resultados que empiecen con http:// no se visualicen.

Alternativa:: Si no queréis utilizar expresiones regulares utilizar strpos.

Como no me interesan los enlaces que empiecen por http:// los voy a excluir y empezar a extraer la información de todos los artículos.

Explicación breve:: No me interesan por que no son entradas/artículos nuevos.

Ahora solo tengo enlaces incompletos pero tan solo tengo que añadir la url principal. La lógica del asunto hasta lo que llevamos es:

  1. Extraemos todo el DOM de la web principal.
  2. Buscamos en que lugar del dom se encuentra el enlace para ver el articulo.
  3. Cuando ya tenemos el enlace {estamos en este punto} procedemos a extraer la información como en el paso 1.

Ya tengo el condicional para que los resultados que empiecen por http:// los excluya, tengo una variable que almacena y completa la URL para extraer la información y por ultimo extraigo el dom de cada URL que va pasando por el bucle. Quedando a si:

Enlace eliminado

Ya estamos en la recta final ahora nos toca buscar en el dom donde se encuentran por ejemplo; el titulo y la descripcion. Vamos a extraer el titulo y la descripción de todos los artículos.

Primero buscamos el titular en el dom:

Enlace eliminado

Como podemos ver en la imagen se encuentra en el h1 de un div con class llamada cab_articulo.
Ahora procedemos a hacer el escaneo con find(".cab_articulo h1").

Como también me interesa la descripción del articulo vamos al código de fuente y buscamos donde se encuentra.

Enlace eliminado

Como podemos ver en la imagen se encuentra en los p de un div con class llamada cuerpo_articulo.
Ahora procedemos a hacer el escaneo con find(".cuerpo_articulo p").

Nos quedaría el código a si, yo le he añadido un poco de formato para que se pueda visualizar el código con claridad.

Enlace eliminado

¿Que hace la función plaintext?: Hace que se muestre en texto plano ya que si se visualiza tal cual lo extra podríamos ver el resultado en HTML cosa que no es lo que queremos..

Y el resultado en pantalla es...:

Enlace eliminado

En la imagen podemos ver unas cuantas cosas como por ejemplo todas las noticias que a extraído (ver en el scroll derecha), también que a extraído todo correctamente el articulo que hemos tomado como ejemplo y ahora ya podríamos por ejemplo añadirlo a una base de datos todo.

Espero que les haya gustado el tutorial, parece complicado pero no lo es una vez pilles el truco lo podrás hacer sin problemas y rápido. Tengo que decir que es un bot muy básico y simple. No lo he querido hacer complejo, orientado a objetos, etc para que los nuevos no les asuste tanto 🙂

Si te a gustado el tutorial por favor dame un "Me agrada".

Respondo dudas si las tenéis.

Un saludo!
 
Última edición:
Quedé Mareada con tanta información! buen aporte. :witless:
 
Los programadores entenderan :encouragement: gracias por este bot amigo
 
Buen tuto :encouragement:
haré unas pruebas
 
Me vendrá muy bien esto por lo que he leído por encimita, luego lo veré con más calma. Se agradece el aporte :encouragement:
 
Muy bueno 😱
 
Excelente, gracias por el aporte :encouragement:
 
Interesante,

Veo que lo que haces es extraer tags tipo <h1>, <h2> y <a> y los almacenas en texto plano.

Gran aporte en php, aunque si alguien no se liar montando un servidor PHP con las librerías necesarias y eso, también se puede hacer comodamente desde el navegador normal utilizando javascript que con jQuery se vuelve muy potente.

Existen extensiones (por ejemplo Greasemonkey para Firefox) que puedes poner al navegador que injecte javaScript en webs ajenas y hagan lo que tu quieras.
vease:
https://addons.mozilla.org/es/firefox/addon/greasemonkey/

Así por ejemplo puedes crear un código jQuery que lea todos los tags <h2>

Insertar CODE, HTML o PHP:
var texto = $('H2 TAGS:<br />');
$('h2').each(function(obj) {
    texto.append($(obj).html() + '<br />');
});

y luego ya muestras la variable como quieras, puedes crear un DIV virtual y mostrarlo en la propia página, aplicable a la web que estés mirando en ese momento
 
Buena información, lo leeré con más calma luego.
 
Buen info me viene bien para hacer mis primeros bots.
 
Muy bueno gracias.
 
Gracias por la aportación

Enviado desde mi nokia 1100 usando tapatalk 2
 
disculpen la ignorancia y para que sirve esto? 😱
 
Buena información hermano.!
 
Interesante,

Veo que lo que haces es extraer tags tipo <h1>, <h2> y <a> y los almacenas en texto plano.

Gran aporte en php, aunque si alguien no se liar montando un servidor PHP con las librerías necesarias y eso, también se puede hacer comodamente desde el navegador normal utilizando javascript que con jQuery se vuelve muy potente.

Existen extensiones (por ejemplo Greasemonkey para Firefox) que puedes poner al navegador que injecte javaScript en webs ajenas y hagan lo que tu quieras.
vease:
https://addons.mozilla.org/es/firefox/addon/greasemonkey/

Así por ejemplo puedes crear un código jQuery que lea todos los tags <h2>

Insertar CODE, HTML o PHP:
var texto = $('H2 TAGS:<br />');
$('h2').each(function(obj) {
    texto.append($(obj).html() + '<br />');
});

y luego ya muestras la variable como quieras, puedes crear un DIV virtual y mostrarlo en la propia página, aplicable a la web que estés mirando en ese momento

No conocia ese metodo, muchas gracias! Pero veo mas rapido utilizando php la verdad jajaja.

Este metodo es muy simple, prometo hacer otro tutorial utilizando metodos mas complejos y completo 🙂
disculpen la ignorancia y para que sirve esto? 😱
Para extraer informacion de web sites 🙂

Respondo dudas si es necesario 🙂
 
Lo probare a ver si capte todo, je je.
 
Agrega una sesión en le tutorial de como añadirlo a la base de datos si?
Porque solo el texto no nos sirve.

Gracias!
 
Me gusto el tutorial, muchas gracias. :encouragement:
 
Agrega una sesión en le tutorial de como añadirlo a la base de datos si?
Porque solo el texto no nos sirve.

Gracias!

Sin problemas en breves realizare una ampliación para los que quieran añadirlo a una base de datos.

Y muchas gracias a todos, espero que os sirva de ayuda.

Saludos
 
Dejo un me gusta, y este video:

[video=youtube;FFkRcEk_tLk]https://www.youtube.com/watch?v=FFkRcEk_tLk[/video]
 
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Temas similares

Negocios del Web
Respuestas
36
Visitas
5K
Negocios del Web
Negocios del Web
Atrás
Arriba