PDA

Ver la Versión Completa : Web bots y 'toa la pesca', ese tema interesante y desconocido


papulo
09-05-2011, 13:07:34
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
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
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 (http://es.wikipedia.org/wiki/SGML) tienen unas normas que facilitan el poder trocearlo para luego analizarlo. Y si partimos de XML (http://es.wikipedia.org/wiki/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
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.

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


<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

$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:


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