web-dev-qa-db-fra.com

Recherche par programme dans Google Python à l'aide de la recherche personnalisée

J'ai un extrait de code utilisant le module pygoogle python qui me permet de rechercher par programmation un terme dans google succinctement:

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

Je viens de découvrir que cela a malheureusement été interrompu et remplacé par quelque chose appelé la recherche personnalisée Google. J'ai regardé les autres questions connexes sur SO mais n'ai rien trouvé que je puisse utiliser. J'ai deux questions:

1) La recherche personnalisée Google me permet-elle de faire exactement ce que je fais dans les trois lignes ci-dessus?

2) Si oui, où puis-je trouver un exemple de code pour faire exactement ce que je fais ci-dessus? Si non, quelle est l'alternative de faire ce que j'ai fait avec pygoogle?

40
user2399453

C'est possible de faire ça. La configuration est ... pas très simple, mais le résultat final est que vous pouvez effectuer une recherche sur tout le Web à partir de python avec quelques lignes de code.

Il y a 3 étapes principales au total.

1ère étape: obtenir la clé Google API

La page pygoogle indique:

Malheureusement, Google ne prend plus en charge l'API pour la recherche SOAP, ni ne fournit de nouvelles clés de licence. En un mot, PyGoogle est quasiment mort à ce stade.

Vous pouvez utiliser leur API AJAX) à la place. Cliquez ici pour un exemple de code: http://dcortesi.com/2008/05/28/google-ajax-search-api -example-python-code /

... mais vous ne pouvez pas utiliser l'API AJAX. Vous devez obtenir une clé API Google. https://developers.google.com/api-client- library/python/guide/aaa_apikeys Pour une utilisation expérimentale simple, je suggère "clé du serveur".

2ème étape: configurer le moteur de recherche personnalisé afin de pouvoir effectuer des recherches sur l'ensemble du Web

En effet, l'ancienne API n'est pas disponible. La meilleure nouvelle API disponible est la recherche personnalisée. Il semble prendre en charge que la recherche dans des domaines spécifiques, cependant, après avoir suivi this SO answer ), vous pouvez effectuer une recherche sur tout le Web:

  1. Sur la page d'accueil de la recherche personnalisée Google ( http://www.google.com/cse/ ), cliquez sur Créer un moteur de recherche personnalisé.
  2. Tapez un nom et une description pour votre moteur de recherche.
  3. Sous Définissez votre moteur de recherche, dans la zone Sites à rechercher, entrez au moins une URL valide (pour l'instant, mettez simplement www.anyurl.com pour passer au-delà de cet écran. Plus d'informations à ce sujet plus tard).
  4. Sélectionnez l'édition CSE souhaitée et acceptez les conditions d'utilisation, puis cliquez sur Suivant. Sélectionnez l'option de disposition souhaitée, puis cliquez sur Suivant.
  5. Cliquez sur l'un des liens sous la section Étapes suivantes pour accéder à votre panneau de configuration.
  6. Dans le menu de gauche, sous Panneau de configuration, cliquez sur Basics.
  7. Dans la section Préférences de recherche, sélectionnez Rechercher sur le Web tout en mettant l’accent sur les sites inclus.
  8. Cliquez sur Enregistrer les modifications.
  9. Dans le menu de gauche, sous Panneau de configuration, cliquez sur Sites.
  10. Supprimez le site que vous avez entré lors du processus de configuration initiale.

Cette approche est également recommandée par Google: https://support.google.com/customsearch/answer/263104

3ème étape: installer le client Google API pour Python

pip install google-api-python-client, Plus d'infos ici:

4ème étape (bonus): faire la recherche

Donc, après avoir configuré cela, vous pouvez suivre les exemples de code depuis quelques endroits:

et se retrouver avec ceci:

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)

Après quelques ajustements, vous pouvez écrire des fonctions qui se comportent exactement comme votre extrait de code, mais je vais sauter cette étape ici.

84
mbdevpl