Búsqueda de Google en Python mediante progtwigción mediante búsqueda personalizada

Tengo un fragmento de código que utiliza el módulo pygoogle python que me permite buscar de manera sucinta cualquier término en google:

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

Acabo de descubrir que, lamentablemente, esto ha sido descontinuado y reemplazado por algo llamado la búsqueda personalizada de Google. Miré las otras preguntas relacionadas en 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 un código de ejemplo para hacer exactamente lo que estoy haciendo arriba? Si no, ¿cuál es la alternativa para hacer lo que hice con pygoogle?

    Es posible hacer esto. La configuración es … no muy sencilla, pero el resultado final es que puede 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 la búsqueda, ni tampoco proporciona nuevas claves de licencia. En pocas palabras, PyGoogle está bastante muerto en este momento.

    Puede utilizar su API AJAX en su lugar. Eche un vistazo aquí para ver el código de ejemplo: http://dcortesi.com/2008/05/28/google-ajax-search-api-example-python-code/

    … pero tampoco puedes usar la API de 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: configura el Motor de búsqueda personalizado para que puedas 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 en dominios específicos, sin embargo, después de seguir esta respuesta , puedes 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 en http://www.anyurl.com para pasar esta pantalla. Más sobre esto más adelante).
    4. Seleccione la edición de 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, a continuación, 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 el 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. Haga clic en Guardar cambios.
    9. En el menú de la izquierda, en el Panel de control, haga clic en Sitios.
    10. Borre 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 (bonus): haz la búsqueda

    Entonces, después de configurar esto, puedes seguir los ejemplos de código de algunos lugares:

    y terminar 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( 'stackoverflow site:en.wikipedia.org', my_api_key, my_cse_id, num=10) for result in results: pprint.pprint(result) 

    Después de algunos ajustes, puede escribir algunas funciones que se comportan exactamente como su fragmento, pero me saltaré este paso aquí.