Discussion:
Desarrollar un buscador
(demasiado antiguo para responder)
Sneaker
2005-05-31 14:15:01 UTC
Permalink
Buenas,

Estoy interesado en desarrollar un buscador tipo "google" :) vamos que
funcione parecido ya que obviamente no llegaré a tanto :).

He estado viendo información por internet y no me ha quedado muy claro.

El proyecto lo quiero colgar en una máquina Linux por lo que entiendo que
el lenguaje a utilizar bien será en C o en Perl, así que agradecería si
alguien puede orientarme un poco.

Gracias y un saludo.
Oscar Garcia
2005-05-31 14:46:28 UTC
Permalink
Post by Sneaker
Estoy interesado en desarrollar un buscador tipo "google" :) vamos que
funcione parecido ya que obviamente no llegaré a tanto :).
Puedes basarte en motores de bases de datos que implementen búsquedas
como los campos fulltext de mysql.
Post by Sneaker
He estado viendo información por internet y no me ha quedado muy claro.
Quizá necesites conocimientos sobre árboles de búsqueda (o búsquedas
binarias) y bases de datos.
Post by Sneaker
El proyecto lo quiero colgar en una máquina Linux por lo que entiendo que
el lenguaje a utilizar bien será en C o en Perl, así que agradecería si
alguien puede orientarme un poco.
Depende de la complejidad de tu "buscador" necesitarás:

* Spider: Es el encargado de visitar las webs y obtener el contenido y
los enlaces que seguir.
* Motor de base de datos: En ella se guarda la información contenida
en cada web de forma que se usan árboles o índices por palabras, etc
que faciliten luego la búsqueda por palabras.
* Motor de búsqueda: Una vez que tienes todo en la base de datos luego
tienes que hacer la búsqueda (agrupaciones por "", símbolos + y - para
que aparezcan o no ciertas palabras en los resultados, etc).

Tanto el motor de base de datos como el de búsqueda viene ya
implementado en mysql (por ejemplo) y te aconsejo que lo uses.

Si lo que realmente quieres es crearte el motor tú mismo entonces
deberías estudiar muuuucho mucho sobre el tema.

Un ejemplo de motor de base de datos:

Metemos dos documentos HTML en la base de datos:

doc1.html -> "Hola, esta es la página primera."
doc2.html -> "Hola, esta es la segunda página."

Al introducirlas creamos en la tabla "urls":

1 - http://www.miweb.com/doc1.html - Hola, esta es la página primera.
2 - http://www.miweb.com/doc2.html - Hola, esta es la segunda página.

Donde 1 y 2 son las claves primarias. Opcionalmente se pueden agrupar
por dominios para facilitar búsquedas por dominios (como la opción
site: de google).

en la tabla "palabras" tenemos:

1 - hola
2 - esta
3 - es
4 - la
5 - página
6 - primera
7 - segunda

Cada vez que encontramos una palabra que no tenemos en la base de
datos la añadimos.

Luego hace falta crear las referencias de cada palabra a cada
documento en una tabla llamada (por ejemplo) "palabrasxurl":

1 - 1 - 1
2 - 2 - 1
3 - 3 - 1
4 - 4 - 1
5 - 5 - 1
6 - 6 - 1
7 - 1 - 2
8 - 2 - 2
9 - 3 - 2
10 - 4 - 2
11 - 7 - 2
12 - 5 - 2

Donde la primera columna sería la clave primaria, la segunda sería la
referencia a la clave de la tabla "palabras" y la tercera sería la
referencia a la clave de la tabla "urls". De esta forma metemos una
referencia por cada palabra que aparece en cada url. Hacemos índice el
campo que hace referencia a las palabras para acelerar las posteriores
búsquedas de palabras.

Luego debes programarte el motor de búsqueda para que vaya buscando
las palabras y vaya puntuando las urls que las contienen (por cada
palabra que coincida le das una puntuación).

En buscadores reales como google las puntuaciones cambian si las
palabras son encontradas en un encabezado (h1, h2, etc), en el título
de la página, etc...

Un saludo y espero que esto arroje luz sobre el asunto y lo veas ahora
más claro.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Sneaker
2005-05-31 15:53:40 UTC
Permalink
Buenas Oscar,

Si, me ayuda a verlo más claro.

Tal vez antes no me expliqué muy bien, pero lo que necesitaba es el
Spider :).

He visto ejemplos por ahi en internet de algunos hechos en Perl, por lo
que optaré a hacer el Spider en Perl y el interface de usuario en PHP.

Si tengo conocimientos sobre BD, no tengo problemas ni en lenguajes de
programación, si no se sabe algo se aprende y punto :P

La filosofia del Spider es lo que me tiene un poco parado...

Ya que tienes que patearte los enlaces de todas las paginas de una Web y
entiendo que para realizar la búsqueda habrá que almacenar lo que se va
encontrando...

¿Correcto?

Luego está la parte de las prioridades y puntuaciones para organizar un
listado para que el usuario encuentre la Web que contiene + información
sobre lo que está buscando.

A ver como termino con esto... :) ya que empezar...

Gracias y un saludo.
Post by Oscar Garcia
Post by Sneaker
Estoy interesado en desarrollar un buscador tipo "google" :) vamos que
funcione parecido ya que obviamente no llegaré a tanto :).
Puedes basarte en motores de bases de datos que implementen búsquedas
como los campos fulltext de mysql.
Post by Sneaker
He estado viendo información por internet y no me ha quedado muy claro.
Quizá necesites conocimientos sobre árboles de búsqueda (o búsquedas
binarias) y bases de datos.
Post by Sneaker
El proyecto lo quiero colgar en una máquina Linux por lo que entiendo
que el lenguaje a utilizar bien será en C o en Perl, así que
agradecería si alguien puede orientarme un poco.
* Spider: Es el encargado de visitar las webs y obtener el contenido y
los enlaces que seguir.
* Motor de base de datos: En ella se guarda la información contenida
en cada web de forma que se usan árboles o índices por palabras, etc
que faciliten luego la búsqueda por palabras.
* Motor de búsqueda: Una vez que tienes todo en la base de datos luego
tienes que hacer la búsqueda (agrupaciones por "", símbolos + y - para
que aparezcan o no ciertas palabras en los resultados, etc).
Tanto el motor de base de datos como el de búsqueda viene ya
implementado en mysql (por ejemplo) y te aconsejo que lo uses.
Si lo que realmente quieres es crearte el motor tú mismo entonces
deberías estudiar muuuucho mucho sobre el tema.
doc1.html -> "Hola, esta es la página primera."
doc2.html -> "Hola, esta es la segunda página."
1 - http://www.miweb.com/doc1.html - Hola, esta es la página primera.
2 - http://www.miweb.com/doc2.html - Hola, esta es la segunda página.
Donde 1 y 2 son las claves primarias. Opcionalmente se pueden agrupar
por dominios para facilitar búsquedas por dominios (como la opción
site: de google).
1 - hola
2 - esta
3 - es
4 - la
5 - página
6 - primera
7 - segunda
Cada vez que encontramos una palabra que no tenemos en la base de
datos la añadimos.
Luego hace falta crear las referencias de cada palabra a cada
1 - 1 - 1
2 - 2 - 1
3 - 3 - 1
4 - 4 - 1
5 - 5 - 1
6 - 6 - 1
7 - 1 - 2
8 - 2 - 2
9 - 3 - 2
10 - 4 - 2
11 - 7 - 2
12 - 5 - 2
Donde la primera columna sería la clave primaria, la segunda sería la
referencia a la clave de la tabla "palabras" y la tercera sería la
referencia a la clave de la tabla "urls". De esta forma metemos una
referencia por cada palabra que aparece en cada url. Hacemos índice el
campo que hace referencia a las palabras para acelerar las posteriores
búsquedas de palabras.
Luego debes programarte el motor de búsqueda para que vaya buscando
las palabras y vaya puntuando las urls que las contienen (por cada
palabra que coincida le das una puntuación).
En buscadores reales como google las puntuaciones cambian si las
palabras son encontradas en un encabezado (h1, h2, etc), en el título
de la página, etc...
Un saludo y espero que esto arroje luz sobre el asunto y lo veas ahora
más claro.
Oscar Garcia
2005-05-31 17:26:55 UTC
Permalink
Post by Sneaker
Tal vez antes no me expliqué muy bien, pero lo que necesitaba es el
Spider :).
La filosofia del Spider es lo que me tiene un poco parado...
Ya que tienes que patearte los enlaces de todas las paginas de una Web y
entiendo que para realizar la búsqueda habrá que almacenar lo que se va
encontrando...
¿Correcto?
Más o menos el spider debe hacer dos tareas:

1.- Evaluar todos los enlaces de una página (frames, links y si
quieres hasta puedes intentarlo parseando javascripts). Esta suele ser
la parte más dura porque tienes que tener en cuenta etiquetas como son
la "base" de todos los enlaces, etc...
2.- Decidir si deben seguirse o no consultando el archivo robots.txt.

Por último el sistema de puntuaciones es lo más complejo teniendo en
cuenta que si lo haces por mysql y su fulltext no tienen implementado
ningún sistema de puntuaciones, tendrías que implementarlo tú mismo.

Un saludo y suerte.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Loading...