¿Cómo consultar una búsqueda avanzada con la API de google customsearch?

¿Cómo puedo usar programáticamente la biblioteca del cliente de Google Python para realizar una búsqueda avanzada con el motor de búsqueda de la API de búsqueda personalizada de Google para obtener una lista de los primeros n enlaces basados ​​en algunos términos y parámetros de una búsqueda avanzada que he consultado?

Intenté verificar la documentación (no encontré ningún ejemplo) y esta respuesta . Sin embargo, este último no funcionó, ya que actualmente no hay soporte para la API de AJAX. Hasta ahora he intentado esto:

 from googleapiclient.discovery import build import pprint my_cse_id = "test" def google_search(search_term, api_key, cse_id, **kwargs): service = build("customsearch", "v1",developerKey="") res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute() return res['items'] results = google_search('dogs', my_api_key, my_cse_id, num=10) for result in results: pprint.pprint(result) 

Y esto:

 import pprint from googleapiclient.discovery import build def main(): service = build("customsearch", "v1",developerKey="") res = service.cse().list(q='dogs').execute() pprint.pprint(res) if __name__ == '__main__': main() 

Por lo tanto, ¿alguna idea de cómo hacer una búsqueda avanzada con la API del motor de búsqueda de Google? Así es como se ven mis credenciales en la consola de Google:

cartas credenciales

Primero debe definir una búsqueda personalizada como se describe aquí , luego asegúrese de que my_cse_id coincida con el my_cse_id búsqueda personalizada (cs) de Google API, por ejemplo

 cx='017576662512468239146:omuauf_lfve' 

es un motor de búsqueda que solo busca dominios que terminan con .com .

A continuación necesitamos nuestro developerKey .

 from googleapiclient.discovery import build service = build("customsearch", "v1", developerKey=dev_key) 

Ahora podemos ejecutar nuestra búsqueda.

 res = service.cse().list(q=search_term, cx=my_cse_id).execute() 

Podemos agregar parámetros de búsqueda adicionales, como el idioma o el país, usando los argumentos descritos aquí , por ejemplo,

 res = service.cse().list(q="the best dog food", cx=my_cse_id, cr="countryUK", lr="lang_en").execute() 

buscaría “la mejor comida para perros” en inglés y el sitio debe ser del Reino Unido.


El siguiente código modificado funcionó para mí. api_key fue eliminado ya que nunca fue usado.

 from googleapiclient.discovery import build my_cse_id = "012156694711735292392:rl7x1k3j0vy" dev_key = "" def google_search(search_term, cse_id, **kwargs): service = build("customsearch", "v1", developerKey=dev_key) res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute() return res['items'] results = google_search('boxer dogs', my_cse_id, num=10, cr="countryCA", lr="lang_en") for result in results: print(result.get('link')) 

Salida

 http://www.aboxerworld.com/whiteboxerfaqs.htm http://boxerrescueontario.com/?section=available_dogs http://www.aboxerworld.com/abouttheboxerbreed.htm http://m.huffpost.com/ca/entry/10992754 http://rawboxers.com/aboutraw.shtml http://www.tanoakboxers.com/ http://www.mondlichtboxers.com/ http://www.tanoakboxers.com/puppies/ http://www.landosboxers.com/dogs/puppies/puppies.htm http://www.boxerrescuequebec.com/ 

Una alternativa al uso de la biblioteca de solicitudes de python si no desea usar la API de descubrimiento de Google:

 import requests, pprint q='italy' api_key='AIzaSyCs.....................' q = requests.get('https://content.googleapis.com/customsearch/v1', params={ 'cx': '013027958806940070381:dazyknr8pvm', 'q': q, 'key': api_key} ) pprint.pprint(q.json()) 

Esto es tarde pero espero que ayude a alguien …

Para uso avanzado de búsqueda

 response=service.cse().list(q="mysearchterm", cx="017576662512468239146:omuauf_lfve", ).execute() 

El método list() acepta más argumentos para ayudar a avanzar en su búsqueda … verifique los argumentos aquí: https://developers.google.com/custom-search/json-api/v1/reference/cse/list