J'essaie d'exécuter une requête de recherche Google à partir d'une application Python. Existe-t-il une interface python? S'il n'y en a pas, personne ne sait quelle API Google me permettra de le faire. Merci
Réponses
Trop de publicités?Il y a un exemple simple ici (typiquement manque des guillemets;-). La plupart de ce que vous verrez sur le web Python interfaces à l'ancienne, abandonnée API SOAP -- l'exemple que je suis en pointant utilise la plus récente et pris en charge API AJAX, c'est certainement celui que vous voulez!-)
Edit: voici une information plus complète sur la version 2.6 de Python exemple les citations &c;-)...:
#!/usr/bin/python
import json
import urllib
def showsome(searchfor):
query = urllib.urlencode({'q': searchfor})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
search_response = urllib.urlopen(url)
search_results = search_response.read()
results = json.loads(search_results)
data = results['responseData']
print 'Total results: %s' % data['cursor']['estimatedResultCount']
hits = data['results']
print 'Top %d hits:' % len(hits)
for h in hits: print ' ', h['url']
print 'For more results, see %s' % data['cursor']['moreResultsUrl']
showsome('ermanno olmi')
Voici la réponse d'Alex portée sur Python3
#!/usr/bin/python3
import json
import urllib.request, urllib.parse
def showsome(searchfor):
query = urllib.parse.urlencode({'q': searchfor})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
search_response = urllib.request.urlopen(url)
search_results = search_response.read().decode("utf8")
results = json.loads(search_results)
data = results['responseData']
print('Total results: %s' % data['cursor']['estimatedResultCount'])
hits = data['results']
print('Top %d hits:' % len(hits))
for h in hits: print(' ', h['url'])
print('For more results, see %s' % data['cursor']['moreResultsUrl'])
showsome('ermanno olmi')
Voici mon approche à cet égard: http://breakingcode.wordpress.com/2010/06/29/google-search-python/
Quelques exemples de code:
# Get the first 20 hits for: "Breaking Code" WordPress blog
from google import search
for url in search('"Breaking Code" WordPress blog', stop=20):
print(url)
# Get the first 20 hits for "Mariposa botnet" in Google Spain
from google import search
for url in search('Mariposa botnet', tld='es', lang='es', stop=20):
print(url)
Notez que ce code n'utilise PAS l'API Google et fonctionne toujours à ce jour (janvier 2012).
Je suis nouveau en python et j'enquêtais sur la façon de faire. Aucun des exemples fournis sont travail correctement pour moi. Certains sont bloqués par google si vous faites beaucoup de (quelques) demandes, dont certaines sont obsolètes. L'analyse de la recherche google html (ajout de l'en-tête dans la demande) fonctionnera jusqu'à ce que google modifie la structure html de nouveau. Vous pouvez utiliser la même logique de recherche dans n'importe quel autre moteur de recherche, en regardant dans le code html (view-source).
import urllib2
def getgoogleurl(search,siteurl=False):
if siteurl==False:
return 'http://www.google.com/search?q='+urllib2.quote(search)
else:
return 'http://www.google.com/search?q=site:'+urllib2.quote(siteurl)+'%20'+urllib2.quote(search)
def getgooglelinks(search,siteurl=False):
#google returns 403 without user agent
headers = {'User-agent':'Mozilla/11.0'}
req = urllib2.Request(getgoogleurl(search,siteurl),None,headers)
site = urllib2.urlopen(req)
data = site.read()
site.close()
#no beatifulsoup because google html is generated with javascript
start = data.find('<div id="res">')
end = data.find('<div id="foot">')
if data[start:end]=='':
#error, no links to find
return False
else:
links =[]
data = data[start:end]
start = 0
end = 0
while start>-1 and end>-1:
#get only results of the provided site
if siteurl==False:
start = data.find('<a href="http://stackoverflow.com/url?q=')
else:
start = data.find('<a href="http://stackoverflow.com/url?q='+str(siteurl))
data = data[start+len('<a href="http://stackoverflow.com/url?q='):]
end = data.find('&sa=U&ei=')
if start>-1 and end>-1:
link = urllib2.unquote(data[0:end])
data = data[end:len(data)]
if link.find('http')==0:
links.append(link)
return links
Utilisation:
links = getgooglelinks('python','http://www.stackoverflow.com/')
for link in links:
print link
(Edit: Ajout d'un paramètre pour affiner les résultats de recherche google à un site spécifique:)