example - python google
Búsqueda de Google desde una aplicación de Python (5)
Estoy intentando ejecutar una consulta de búsqueda de Google desde una aplicación de Python. ¿Hay alguna interfaz de Python que me permita hacer esto? Si no hay nadie sabe qué API de Google me permitirá hacer esto. Gracias.
Aquí está la respuesta de Alex portada a 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'')
Aquí está mi enfoque para esto: http://breakingcode.wordpress.com/2010/06/29/google-search-python/
Un par de ejemplos de código:
# 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)
Tenga en cuenta que este código NO utiliza la API de Google, y todavía está funcionando hasta la fecha (enero de 2012).
Como la API de AJAX está muerta, puede usar un servicio de terceros como Serp API que es un contenedor de resultados del motor de búsqueda de Google.
Es fácil de integrar con 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
Soy nuevo en Python y estaba investigando cómo hacer esto. Ninguno de los ejemplos proporcionados funciona correctamente para mí. Algunos están bloqueados por google si realiza muchas (pocas) solicitudes, algunas están desactualizadas. Al analizar el html de búsqueda de google (agregando el encabezado en la solicitud) funcionará hasta que google cambie la estructura html nuevamente. Puede usar la misma lógica para buscar en cualquier otro motor de búsqueda, buscando en el 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
Uso:
links = getgooglelinks(''python'',''http://www..com/'')
for link in links:
print link
(Editar 1: Agregar un parámetro para restringir la búsqueda de Google a un sitio específico)
(Editar 2: Cuando agregué esta respuesta estaba codificando un script de Python para buscar subtítulos. Hace poco lo cargué en Github: Subseek )
Aquí hay un ejemplo simple (curiosamente faltan algunas comillas ;-). La mayoría de lo que verás en la web son las interfaces de Python con la vieja API de SOAP discontinuada; el ejemplo que estoy señalando utiliza la API AJAX más reciente y compatible, ¡eso es definitivamente lo que quieres! -)
Editar : aquí hay un ejemplo más completo de Python 2.6 con todas las comillas necesarias & 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'')