Ich versuche, eine Google-Suchabfrage von einer Python-App aus auszuführen. Gibt es da draußen ein Python-Interface, das mich das machen lässt? Wenn nicht, weiß jemand, mit welcher Google-API ich dies tun kann. Vielen Dank.
Es gibt ein einfaches Beispiel hier (eigenartig fehlen einige Anführungszeichen ;-). Das meiste, was Sie im Web sehen werden, sind Python-Schnittstellen zu der alten, nicht mehr unterstützten SOAP - API - das Beispiel, auf das ich verweise, verwendet die neuere und unterstützte AJAX - API wollen!-)
Edit: Hier ist ein vollständigeres Python 2.6-Beispiel mit allen erforderlichen Anführungszeichen & 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')
Hier ist Alex 'Antwort auf Python3 portiert
#!/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')
Hier mein Ansatz dazu: http://breakingcode.wordpress.com/2010/06/29/google-search-python/
Ein paar Codebeispiele:
# 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)
Beachten Sie, dass dieser Code NICHT die Google-API verwendet und bis heute funktioniert (Januar 2012).
Ich bin neu in Python und habe nachgeforscht, wie das geht. Keines der aufgeführten Beispiele funktioniert für mich richtig. Einige werden von Google blockiert, wenn Sie viele (wenige) Anfragen stellen, andere sind veraltet. Das Analysieren der Google-Such-HTML (Hinzufügen des Headers in der Anforderung) funktioniert solange, bis Google die HTML-Struktur erneut ändert. Sie können dieselbe Logik verwenden, um in einer anderen Suchmaschine zu suchen, indem Sie in die HTML-Datei (view-source) schauen.
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
Verwendungszweck:
links = getgooglelinks('python','http://www.stackoverflow.com/')
for link in links:
print link
(Bearbeiten 1: Hinzufügen eines Parameters, um die Google-Suche auf eine bestimmte Website zu beschränken.)
(Edit 2: Als ich diese Antwort hinzugefügt habe, habe ich ein Python-Skript für die Suche nach Untertiteln programmiert. Ich habe es kürzlich in Github hochgeladen: Subseek )
Da die API AJAX tot ist, können Sie einen Drittanbieter-Dienst wie Serp API verwenden, der einen Ergebnis-Wrapper für Google-Suchmaschinen darstellt.
Es ist einfach in Python zu integrieren:
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