J'essaie d'exécuter une requête de recherche Google à partir d'une application Python. Existe-t-il une interface python permettant de le faire? S'il n'y en a pas, personne ne sait quelle API Google me permettra de le faire. Merci.
Il y a un exemple simple ici (il manque particulièrement quelques citations ;-). La plupart de ce que vous verrez sur le Web sont des interfaces Python avec l'ancienne API SOAP abandonnée. L'exemple que je cite utilise l'API AJAX la plus récente et la plus prise en charge. vouloir!-)
Edit: voici un exemple plus complet de Python 2.6 avec toutes les citations nécessaires & 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 à ce sujet: 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 je cherchais comment faire cela. Aucun des exemples fournis ne fonctionne correctement pour moi. Certaines sont bloquées par Google si vous faites beaucoup (peu) de requêtes, d'autres sont obsolètes. L'analyse de la recherche Google au format HTML (ajout de l'en-tête dans la demande) fonctionnera jusqu'à ce que Google modifie à nouveau la structure html. Vous pouvez utiliser la même logique pour rechercher dans tout 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="/url?q=')
else:
start = data.find('<a href="/url?q='+str(siteurl))
data = data[start+len('<a href="/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
Usage:
links = getgooglelinks('python','http://www.stackoverflow.com/')
for link in links:
print link
(Éditer 1: Ajouter un paramètre pour limiter la recherche Google à un site spécifique)
(Edit 2: Lorsque j'ai ajouté cette réponse, je codais un script Python pour rechercher des sous-titres. Je l'ai récemment chargé sur Github: Subseek )
Comme l'API AJAX est morte, vous pouvez utiliser un service tiers tel que API Serp qui est un wrapper de résultats de moteur de recherche Google.
Il est facile d'intégrer Python:
from lib.google_search_results import GoogleSearchResults
params = {
"q" : "Coffee",
"location" : "Austin, Texas, United States",
"hl" : "en",
"gl" : "us",
"google_domain" : "google.com",
"api_key" : "demo",
}
query = GoogleSearchResults(params)
dictionary_results = query.get_dictionary()
GitHub: https://github.com/serpapi/google-search-results-python