Automatizando las búsquedas en Google gracias a Python - BoomerNiX

martes, 30 de abril de 2019

Automatizando las búsquedas en Google gracias a Python

Día a día trabajamos con Google, ya no nos imaginamos la vida sin este buscador. Por ello hoy vamos a ver cómo crear nuestro buscador de Google a través de Python. En menos de 100 líneas se puede conseguir, y el resultado que obtendremos será Título de la página y su enlace.

¿Que necesitamos?
Python 3 con la librería requests y BeautifulSoup.

¿Cómo se ejecutará el buscador? 
Nosotros solo tendremos que agregar a la llama algunos argumentos:
  • La búsqueda (único obligatorio) 
  • La paginación máxima (por defecto solo se consulta la primera página, los 10 primeros resultados) 
  • El tiempo entre petición para Google (por defecto 2 segundos).
  • Fichero donde guardar el resultado (por defecto se muestra por pantalla) 

Alternativas o cambios en el script que pueden interesar 
Como siempre se dice, el límite es tu imaginación, pero por destacar algunos puntos.
  • En lugar de realizar una sola búsqueda, podemos automatizar la búsqueda de varias consultas. 
  • Mostrar también la descripción que da Google. 
  • Obtener los enlaces vídeos de youtube que se muestran en resultados. 

¿Cómo se ha implementado? 
La idea con la que se ha llevado a cabo el script es el siguiente: hacemos una búsqueda en Google con “google.com/search?q=”, en ella a través de la librería beautifulsoup buscamos los elementos, a nosotros nos interesan los enlaces que se encuentran dentro de un h3 con clase “r”, de ahí obtenemos los títulos y los enlaces (esto puede variar si cambia el html de Google, la última modificación nos hace buscar un div con clase "jfp3ef"). 

Figura 1: Petición a Google

Para agregar la paginación, se buscan los elementos a con clase “fl” y sacamos su valor del href, para hacer la petición, se debe saber que es una ruta relativa y necesitamos agregar la parte de google.com. 


Figura 2: Aplicando paginación

Por si no queda claro a que me refiero con la paginación de Google, lo que busco es los números que se ven en la figura 3. 
Figura 3: Paginación de Google


Cuando obtenemos los enlaces, podemos ver que nos encontramos al inicio con “/url?q=” y en ocasiones al final con “&sa=….”, por ello antes de guardar los enlaces, se hace una limpia del enlace. 


Figura 4: Limpiando las URLs
Y todo esto es utilizado en una función que se encarga de hacer el trabajo, no es muy larga, se muestra en la figura 5.

Figura 5: Función para tratar las búsquedas en Google
Quedaría por ver la parte en la que se recogen los argumentos (librería argparse) y la comprobación de guardar los resultados en un fichero, ya que no aportan valor. Para ejecutar el script, bastaría con las siguientes 2 líneas:

gs = GoogleSearch()
results = gs.request_data(args.search, pages=args.pages, pause=args.time)

Con esta explicación a alto nivel se puede entender el funcionamiento y/o crear nuestro propio script. 

Prueba de concepto 
A continuación, para que se pueda ver en funcionamiento, dejo un vídeo probando el script. 




Algunas limitaciones 
Puede llegar el momento en el que Google nos tache de robot y no nos deje trabajar bien, hasta el momento no he tenido el problema. Pero si llega el caso, siempre se puede tirar de Selenium.

Referencias a librería existentes 
Existen algunas librerías creadas, para Python puedes probar la siguiente: https://github.com/MarioVilas/googlesearch 

Por último, puedes comprobar cómo aplicamos en nuestro Business card reader esta búsqueda para sacar Curriculums de Google, en este post de elladodelmal. Realizar este script no lleva mucho tiempo, y nos da el poder de hacer lo que queramos. ¡Hasta pronto! 

No hay comentarios:

Publicar un comentario