google from abenassi python google-search

from - google search api python



¿Por qué la búsqueda de Google devuelve el error HTTP 403? (4)

Considere el siguiente código de Python:

30 url = "http://www.google.com/search?hl=en&safe=off&q=Monkey" 31 url_object = urllib.request.urlopen(url); 32 print(url_object.read());

Cuando esto se ejecuta, se lanza una excepción:

File "/usr/local/lib/python3.0/urllib/request.py", line 485, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbidden

Sin embargo, cuando esto se coloca en un navegador, la búsqueda vuelve como se esperaba. ¿Que está pasando aqui? ¿Cómo puedo superar esto para poder buscar en Google mediante programación?

¿Alguna idea?


Como sugirió Lacqui , las API de Google son la forma en que quieren que usted realice solicitudes desde el código. Desafortunadamente, encontré que su documentación estaba dirigida a personas que escriben páginas web de AJAX, no haciendo solicitudes HTTP en bruto. Usé los encabezados de LiveHTTP para rastrear las solicitudes HTTP que hicieron las muestras, y encontré útil la publicación del blog de ddipaolo .

Una cosa más que me arruinó: te limitan a los primeros 64 resultados de una consulta. Por lo general, no es un problema si solo le proporciona a los usuarios de Internet un cuadro de búsqueda, pero no es útil si está tratando de usar Google para ir a la minería de datos. Supongo que no quieren que vayas a minar datos usando su API. Ese número 64 ha cambiado con el tiempo y varía entre los productos de búsqueda.

Actualización: parece que definitivamente no quieren que vayas a la minería de datos. Finalmente, recibirá un error 403 con un enlace a este aviso de acceso a la API .

Revise los Términos de uso de las API (s) que está utilizando (con el vínculo en la barra lateral derecha) y asegúrese de cumplirlas. Es probable que lo hayamos bloqueado por una de las siguientes infracciones de los Términos de uso: Recibimos solicitudes automatizadas, como raspado y búsqueda previa. Las solicitudes automatizadas están prohibidas; todas las solicitudes deben realizarse como resultado de una acción del usuario final.

También enumeran otras violaciones, pero creo que esa fue la que se desencadenó para mí. Puede que tenga que investigar el servicio BOSS de Yahoo. No parece tener tantas restricciones.


Esto debería funcionar

user_agent = ''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'' url = "http://www.google.com/search?hl=en&safe=off&q=Monkey" headers={''User-Agent'':user_agent,} request=urllib2.Request(url,None,headers) //The assembled request response = urllib2.urlopen(request) data = response.read() // The data u need


Lo estás haciendo muy a menudo. Google tiene límites establecidos para evitar que los bots de búsqueda lo inunden. También puede intentar configurar el agente de usuario en algo que se parezca más a un navegador normal.


Si desea realizar búsquedas de Google "correctamente" a través de una interfaz de programación, eche un vistazo a las API de Google . No solo son la forma oficial de buscar en Google, sino que tampoco es probable que cambien si Google cambia el diseño de la página de resultados.