Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Hacer búsquedas en Google

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Dom Oct 07, 2007 5:28 am
later
Perlero Nuevo
Perlero Nuevo
Registrado: 06 Oct 2007
Mensajes: 37
Hacer búsquedas en Google Responder citando

¡Hola!. He estado investigando acerca de cómo hacer búsquedas en Google.
Y me topé con este manual:

http://google.dirson.com/apis/ejemplo01.php

No me gusta la forma con la que lo hace en el manual.

Yo lo que quiero es poder hacer una búsqueda en Google a partir de una palabra que defina, y guardar las urls que me dio como resultado la búsqueda en un array. Quiero hacer más cosas, pero quiero empezar cómo hacer eso.
Mensaje Dom Oct 07, 2007 5:31 am
joss
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Sep 2007
Mensajes: 36
Responder citando

Yo te dejo un Bot de Google escrito en Phyton. Aunque si no sabes Phyton puede que te cueste traducirlo a Perl.

Python:
#!/usr/bin/env python

"""
        #########################
        ## goopyx 1.0 b        ##
        ##            by nekro ##
        #########################

        Contacto:
            http://www.hackerss.com

        Uso:
                ./goopyx [opciones]

                opciones:

                -l  --logfile=        Archivo de logs.
                -p  --paginas=        Paginas a mostrar (max 10) y debe ser un numero.

"
""


import re,urllib2,sys,getopt
from sgmllib import SGMLParser

class atag(SGMLParser):
    def reset(self):
        SGMLParser.reset(self)
        self.urls = []

    def start_a(self, attrs):
        href = [x for y, x in attrs if y=='href']
        if href:
            self.urls.extend(href)


def google(query,paginas):

    #definimos variables
    google="http://www.google.com.mx/search?q=%s&num=100&start=%d&sa=N"
#url de google
    cont = 0        #contador
    query = "%20".join(query) #cadena de busqueda
    ident = re.compile("related:")
    listalinks = [""]


    while cont < paginas:

        #armamos la url
        urlgoogle = google % (query,cont * 100)

        #descargamos la pagina
        req = urllib2.Request(urlgoogle)
        opener = urllib2.build_opener()
        opener.addheaders = [('User-agent', 'Mozilla/5.0')]
        f = opener.open(req)
        html = f.read()

        #extraemos todos los links
        links = atag()
        links.feed(html)
        links.close()

        #checamos cada link hasta encontrar el correcto
        for x in links.urls:
            #print x
            if ident.search(x):
                url = x.replace("/search?hl=es&q=related:","")
                url = urllib2.unquote(url)
                listalinks.append(url)





        cont += 1
    #devolvemos una lista con los links

    totallinks = len(listalinks)

    return listalinks,totallinks

def guarda(listalinks,logfile):

    archivo = open(logfile,"a")
    #links = "\n".join(listalinks)
    for links in listalinks:
        archivo.write(links)
        archivo.write("\n")
    archivo.close()

def main():

    #Variables

    paginas = 10
    logfile = "google.txt"


    #Iniciamos el programa
    logo = """
              #########################
              ## goopyx 1.0 b        ##
              ##            by nekro ##
              #########################
           "
""

    ayuda = """
              USO:
                    %s [opciones]

                opciones:

                -l  --logfile=        Archivo de logs.
                -p  --paginas=        Paginas a mostrar (max 10) y debe ser un numero.


            "
"" % sys.argv[0]
    #obtenemos los parametros

    argumentos = sys.argv[1:]
    try:
        opt,args = getopt.getopt(argumentos,"p:l:",["paginas=","logfile="])
    except getopt.GetoptError:
        print ayuda
        sys.exit()

    for o,a in opt:
        if o in ("-p","--paginas"):
            try:
                paginas = int(a)
            except ValueError:
                print ayuda
                sys.exit()

        elif o in ("-l","--logfile"):
            logfile = a


    #iniciamos
    print logo
    query = raw_input(">>> Consulta: ")
    print ">>> Buscando: %s" % query
    print ">>> Paginas : %d" % paginas
    print ">>> Logfile : %s" % logfile
    print ">>> ....."


    query = query.split(" ")


    listalinks,totallinks = google(query,paginas)
    guarda(listalinks,logfile)

    print ">>> Se econtraron %d links" % totallinks


# Ejecutamos todo
if __name__ == '__main__':
    try:
        main()
    except  KeyboardInterrupt:
        print "Cancelado por el usuario."
Mensaje Dom Oct 07, 2007 5:32 am
later
Perlero Nuevo
Perlero Nuevo
Registrado: 06 Oct 2007
Mensajes: 37
Responder citando

Gracias por el code, pero yo busco algo más sencillito. Tal vez este code me sirva en un futuro. Gracias igualmente.
Mensaje Dom Oct 07, 2007 5:58 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4104
Ubicación: Valladolid, España
Responder citando

En CPAN hay un montón de módulos para Google. En búsquedas, si no quieres usar la API de Google, deberás buscar un módulo del tipo Scraper.

En cambio, solicitando un código de uso a Google, podrás hacer lo que quieres con solo esto:

Perl:
  use WWW::Search;
  my $search = WWW::Search->new('Google', key => $key);
  $search->native_query("leon brocard");
  while (my $result = $search->next_result()) {
    print $result->title, "\n";
    print $result->url, "\n";
    print $result->description, "\n";
    print "\n";
  }
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group