2010-06-23 2 views
1

J'essaie d'enregistrer le premier résultat d'une recherche Google en utilisant Python et simplejson, mais je ne peux pas accéder aux résultats de la recherche comme le démontrent de nombreux exemples en ligne. Voici un extrait:Pourquoi les requêtes API Google via simplejson retournent-elles "responseData": null?

url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % (query) 
search_results = urllib.urlopen(url) 
json = simplejson.load(search_results) 
try: 
    results = json['responseData']['results'] # always fails at this line 
    first_result = results[0] 
except: 
    print "attempt to set results failed" 

Quand je vais à http://ajax.googleapis.com/ajax/services/search/web?v=1.0&stackoverflow (ou toute autre chose substitué au% s) dans un navigateur, il affiche la ligne « { » responseData ": null, « responseDetails »: « Clip balayage » "responseStatus": 204}. " Existe-t-il un autre moyen d'accéder aux résultats d'une recherche Google en Python en plus d'essayer d'utiliser le responseData apparemment vide?

Répondre

2

Vous avez manqué le & q =. Vous devriez également envisager d'utiliser une api-clé. http://code.google.com/intl/de/apis/ajaxsearch/documentation/. En plus de cette contaction de chaîne ordinaire ne fonctionne pas, vous devez échapper le paramètre.

url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q= ' + urllib.quote_plus(query) 
+0

Merci beaucoup, evilpie! Mais, après avoir ajouté le & q =, j'obtiens toujours une valeur nulle pour responseData. Est-ce que l'utilisation d'une clé API changerait cela? Si non, savez-vous ce que cela ferait? J'aurais dû préciser que j'avais défini une requête égale à urllib.urlencode ({'q': 'site: linkedin.com% s'% (company)}), mais je ne l'ai pas incluse dans l'extrait. – user374372