google python google-custom-search

google search api python



Búsqueda programática de google en Python mediante búsqueda personalizada (1)

Tengo un fragmento de código que utiliza el módulo pygoogle python que me permite buscar mediante programación algún término en google de forma sucinta:

g = pygoogle(search_term) g.pages = 1 results = g.get_urls()[0:10]

Me acabo de enterar que desafortunadamente esto se ha descontinuado y reemplazado por algo llamado búsqueda personalizada de Google. Miré las otras preguntas relacionadas sobre SO pero no encontré nada que pudiera usar. Tengo dos preguntas:

1) ¿La búsqueda personalizada de Google me permite hacer exactamente lo que estoy haciendo en las tres líneas anteriores?

2) En caso afirmativo, ¿dónde puedo encontrar el código de ejemplo para hacer exactamente lo que estoy haciendo arriba? Si no, ¿cuál es la alternativa para hacer lo que hice usando pygoogle?


Es posible hacer esto. La configuración es ... no muy sencilla, pero el resultado final es que puedes buscar en toda la web desde Python con pocas líneas de código.

Hay 3 pasos principales en total.

1er paso: obtener la clave API de Google

La página de pygoogle dice:

Desafortunadamente, Google ya no admite la API SOAP para búsqueda, ni proporciona nuevas claves de licencia. En pocas palabras, PyGoogle está prácticamente muerto en este momento.

Puede usar su API AJAX en su lugar. Consulte aquí el código de muestra: http://dcortesi.com/2008/05/28/google-ajax-search-api-example-python-code/

... pero tampoco puedes usar la API AJAX. Tienes que obtener una clave de API de Google. https://developers.google.com/api-client-library/python/guide/aaa_apikeys Para un uso experimental simple, sugiero "clave de servidor".

2do paso: configurar el motor de búsqueda personalizado para que pueda buscar en toda la web

De hecho, la antigua API no está disponible. La mejor nueva API que está disponible es la búsqueda personalizada. Parece que solo admite búsquedas dentro de dominios específicos, sin embargo, después de seguir esta respuesta SO , puede buscar en toda la web:

  1. Desde la página de inicio de Búsqueda personalizada de Google ( http://www.google.com/cse/ ), haga clic en Crear un motor de búsqueda personalizado.
  2. Escriba un nombre y una descripción para su motor de búsqueda.
  3. En Definir su motor de búsqueda, en el cuadro Sitios para buscar, ingrese al menos una URL válida (por ahora, simplemente ingrese www.anyurl.com para pasar esta pantalla. Más sobre esto más adelante).
  4. Seleccione la edición CSE que desee y acepte los Términos de servicio, luego haga clic en Siguiente. Seleccione la opción de diseño que desee y luego haga clic en Siguiente.
  5. Haga clic en cualquiera de los enlaces en la sección Pasos siguientes para navegar a su Panel de control.
  6. En el menú de la izquierda, en Panel de control, haga clic en Conceptos básicos.
  7. En la sección Preferencias de búsqueda, seleccione Buscar en toda la web pero haga hincapié en los sitios incluidos.
  8. Haz clic en Guardar cambios.
  9. En el menú de la izquierda, en Panel de control, haga clic en Sitios.
  10. Elimine el sitio que ingresó durante el proceso de configuración inicial.

Google también recomienda este enfoque: https://support.google.com/customsearch/answer/2631040

3er paso: instalar el cliente API de Google para Python

pip install google-api-python-client , más información aquí:

4to paso (bonificación): haz la búsqueda

Entonces, después de configurar esto, puede seguir los ejemplos de código desde pocos lugares:

y terminamos con esto:

from googleapiclient.discovery import build import pprint my_api_key = "Google API key" my_cse_id = "Custom Search Engine ID" def google_search(search_term, api_key, cse_id, **kwargs): service = build("customsearch", "v1", developerKey=api_key) res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute() return res[''items''] results = google_search( '' site:en.wikipedia.org'', my_api_key, my_cse_id, num=10) for result in results: pprint.pprint(result)

Después de algunos ajustes, podría escribir algunas funciones que se comporten exactamente como su fragmento, pero omitiré este paso aquí.