it-swarm.com.de

Google-Suche aus einer Python-App

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.

51
Res

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')
70
Alex Martelli

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')
17
John La Rooy

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).

11
Mario Vilas

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('&amp;sa=U&amp;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

0
Hartator