Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   La Taberna (https://www.clubdelphi.com/foros/forumdisplay.php?f=40)
-   -   Web bots y 'toa la pesca', ese tema interesante y desconocido (https://www.clubdelphi.com/foros/showthread.php?t=73676)

papulo 09-05-2011 13:07:34

Web bots y 'toa la pesca', ese tema interesante y desconocido
 
Buenas gente,

hacía mucho tiempo que no me pasaba por aquí, cual hijo crecidito que abandona el hogar paterno para irse en busca de aventuras y dejar de calentar la cabeza a los progenitores (grandes y pacientes foreros que me ayudaron en mis comienzos).

El caso es que por temas laborales me he topado con los webbots, crawlers y cosillas similates, descubriendo un mundo muy interesante pero a la vez muy abstracto para una sola cabeza pensante.

No me preguntéis por que, pero el primer foro donde se me ha ocurrido meter el hocico ha sido aquí, cuna de cracks y buena gente.

El caso es que me apetece hablar de este tema, compartir ideas (también quebraderos de cabeza) y no se donde ponerlo o por donde empezar.

Bueno, empezar si, estoy leyendo un libro "Webbots, spiders and screen crapers" de Michael Schrenk, una buena guía para comenzar, te da algunas ideas y te muestra el camino, pero como todos los libros, los ejemplos son perfectos y la realidad te da una patada en la entrepierna.

Hasta donde he llegado, un webbot te carga el código de una web dentro de una variable y luego parseas/buscas la información que deseas y haces las operaciones que te apece.

Por dar un ejemplo, un robot te podría rastrear una raza de perros en una serie de perreras que tengan sus perros listados en internet para luego mostrar las coincidencias en el resultado de las perreras de la zona y si el usuario está conforme, darle un nuevo hogar (luego te forras con el adsense de tiendas de perros o te socias con alguna tienda para ello :))

A ver quien se anima por aquí.

Ñuño Martínez 09-05-2011 15:25:05

Cita:

Empezado por papulo (Mensaje 399417)
Hasta donde he llegado, un webbot te carga el código de una web dentro de una variable y luego parseas/buscas la información que deseas y haces las operaciones que te apece.

Vaya manera de desmontar un mito. :D

Pero a lo que venía yo es a: ¿incluimos a los "spiders" en "toa la pesca"?

papulo 09-05-2011 16:10:10

El título del libro es ya es de por si 100% explícito "Webbots, spiders and screen crapers".

Por lo que todo lo que puedas aportar será bienvenido.

En mi caso comentaré, que el tema de usar parseadores de texto, no siempre me funciona. ¿Que te parece usar DOMelement para ello? Permite cargar un trozo de código HTML en una objeto de esa clase y luego tratarlo y demás.

El único problema es la poca documentación que he encontrado al respecto, pero tanto trabajar con DOM en javascript, hace que me resulte mas cómodo :D

Supongo que cuantos mas métodos mejor.

Al González 09-05-2011 16:53:59

analizador sintáctico
análisis de sintaxis
analizar sintaxis

papulo 09-05-2011 17:11:05

Cita:

Empezado por Al González (Mensaje 399426)
analizador sintáctico
análisis de sintaxis
analizar sintaxis

Primero :eek: y luego :confused:.

Buenas Al ¿podrías explayarte un poco mas? Por favor.

Ñuño Martínez 09-05-2011 17:23:16

Creo que el Maestro Al se refiere a que uses "analizar (etc.)" en vez de "parsear". Yo no quería decir nada, porque luego me sacáis lo de la letra "x" y... :rolleyes::cool::p:D

Respecto a extraer la información, hay que tener en cuenta que los documentos SGML tienen unas normas que facilitan el poder trocearlo para luego analizarlo. Y si partimos de XML, que es más estricto y gerárquico, pues la cosa es incluso más fácil. El último HTML es casi XML, mientras que los anteriores son SGML.

El problema que veo es que la mayor parte de los documentos que hay en la WWW no están bien formateados, porque o no cumplen con el HTML que le corresponde (y a veces ni siquiera con SGML), o no usan correctamente las etiquetas (por ejemplo, usar <table /> como complemente cosmético, o usar <ul /> en vez de <dl />, etc.). Y con HTML5 (que incluye <nav />, <sumary />, <article /> y demás) no creo que lo hagan mucho mejor...

papulo 09-05-2011 18:31:08

Cita:

Empezado por Ñuño Martínez (Mensaje 399433)
Creo que el Maestro Al se refiere a que uses "analizar (etc.)" en vez de "parsear". Yo no quería decir nada, porque luego me sacáis lo de la letra "x" y... :rolleyes::cool::p:D

Okis! Usaré "analizar" y derivados.

Cita:

Empezado por Ñuño Martínez (Mensaje 399433)
El problema que veo es que la mayor parte de los documentos que hay en la WWW no están bien formateados, porque o no cumplen con el HTML que le corresponde (y a veces ni siquiera con SGML), o no usan correctamente las etiquetas (por ejemplo, usar <table /> como complemente cosmético, o usar <ul /> en vez de <dl />, etc.). Y con HTML5 (que incluye <nav />, <sumary />, <article /> y demás) no creo que lo hagan mucho mejor...

Ese es el problemón con el que me encuetro. Si quiero analizar un código HTML con tablas dentro de tablas, intento usar funciones que tiene como paramentros de entrada y salida "<table" y "</table>", y al analizar el texto, paran al encontrar la primera etiqueta de cierre.

Por eso sopeso cargar en el objeto DOM el código y luego iterar entre las distintas tablas hasta encontrar los indicadores correctos que me marquen el tesoro (o datos a buscar :rolleyes:)

Realmente la gente maqueta con los pies, madre de dios cuantas tablas se usan para que quede "bonito" :mad:

roman 09-05-2011 18:32:00

Cita:

Empezado por Ñuño Martínez (Mensaje 399433)
que es más estricto y gerárquico

Primero :eek: y luego :confused:

Je, je, :p :D

// Saludos

Ñuño Martínez 09-05-2011 18:35:54

Bendita dislexia
 
Tengo problemas con la jerarquía, siempre los he tenido. :(

Y para colmo, últimamente, mi antes superficial dislexia ha aumentado exponencialmente. Tengo que releer mis textos como diecisiete veces, y aun así se me escapan errores (ni el rojo del corrector automático veo, ya).

papulo 10-05-2011 12:32:41

3 Archivos Adjunto(s)
Bueno bueno,

como lo haríais para analizar tablas dentro de tablas dentro de tablas (repetir n veces), la forma que tengo de analizar las webs, es primero buscar una "marca del tesoro", una cadena de texto que identifique el elemento contenedor de los datos que necesito extraer; puede ser un título o una cosa similar, exclusiva al 100%.

Adjunto un fichero de ejemplo, donde quiero sacar los datos "Equivalencias":

Código:

<td valign="top" colspan="2" class="textos">
HITACHI:<br>
S114-850, -A,-B,-C<br>
OPEL:<br>
1202033<br>
1202146<br>
1202161</td>

También adjunto las dos librerías que usan en el libro para trabajar.

De hecho, ahora usaba la función
Código PHP:

$text_html "<div>...</div>"//el texto html para analizar
$delimitador_inicio "<table";
$delimitacion_final "</table>";
$tablas parse_array($text_html$delimitador_inicio$delimitacion_final); 

La teoría dice que con esta llamada, tendría todas las tablas existentes en el código dentro de un array pero veo que se hace la picha un lío la pobre.

Un ejemplo de programa en PHP:

Código PHP:

<?php

require_once 'LIB_http.php';
require_once 
'LIB_parse.php';

set_time_limit(0);

$web_source file_get_contents("http://localhost/SkyNet/html/robots/table/dummy.html");

$table_array parse_array($web_source"<table""</table>");

print_r($table_array);

for (
$xx 0$xx count($table_array); $xx++) {
    
$marca_tabla "Equivalencias";
    if (
stristr($table_array[$xx], $marca_tabla)) {
        
$product_row_array parse_array($table_array[$xx], "<tr""</tr>");
        for (
$table_row 0$table_row count($product_row_array); $table_row++) {
            if (
stristr($product_row_array[$table_row], $marca)) {
                
$product_cell_array parse_array($product_row_array[$table_row], "<td""</td>");
            }
        }
    }
}
?>

Al final el array con las tablas anda manco.

Al González 10-05-2011 17:53:42

Gracias por adjuntar esas bibliotecas (por un momento creí que sugerías que saliéramos a comprar algún libro). Veo que están en PHP, ¿te es válida también una solución en Delphi? :)

papulo 11-05-2011 12:02:20

Pues ando buscando, en este caso concreto, desarrollar con PHP/cURL, luego, si tuviera que cambiar de lenguaje usaría Python, que está muy bien enfocado.

De todas maneras, las soluciones teóricas son aplicables a cualquier lenguaje, jejeje.

PD: El libro lo tienes por internet para descargarlo, lo recomiendo encarecidamente.

papulo 11-05-2011 12:32:18

A parte, intento que sea lo mas multiplataforma posible. Trabajo con Ubuntu y valoro mucho ese aspecto.


La franja horaria es GMT +2. Ahora son las 13:07:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi