Foros del Web » Programando para Internet » Python »

Búsqueda en Google con Python3

Estas en el tema de Búsqueda en Google con Python3 en el foro de Python en Foros del Web. Buenas, estoy trabajando en una aplicación personal (escrita en Python3) para buscar fondos de escritorio en Google y descargarlos masivamente (me encantan los wallpapers ^^), ...
  #1 (permalink)  
Antiguo 08/10/2011, 10:31
Avatar de Hazuki  
Fecha de Ingreso: mayo-2011
Mensajes: 34
Antigüedad: 13 años, 7 meses
Puntos: 7
Búsqueda en Google con Python3

Buenas, estoy trabajando en una aplicación personal (escrita en Python3) para buscar fondos de escritorio en Google y descargarlos masivamente (me encantan los wallpapers ^^), pero para ello necesito realizar una búsqueda, y ahí llega el problema.

Al momento de hacer la petición, me devuelve un error 400: "Your client has issued a malformed or illegal request."

Mi código es el siguiente:
Código Python:
Ver original
  1. import httplib2
  2. from urllib.parse import urlencode
  3.  
  4. q = 'anime'
  5.  
  6. h = httplib2.Http()
  7. data = {
  8.     'tbm'    : 'isch',
  9.     'hl'     : 'en',
  10.     'source' : 'hp',
  11.     'biw'    : '',
  12.     'bih'    : '',
  13.     'btnG'   : 'Search Images',
  14.     'gbv'    : 2,
  15.     'aq'     : 'f',
  16.     'aqi'    : '',
  17.     'aql'    : '',
  18.     'oq'     : '',
  19.     'q'      : q,
  20. }
  21.  
  22. response, content = h.request(uri="http://www.google.com/search", method="GET", body=urlencode(data), headers={
  23.     'Content-Type': 'application/x-www-form-urlencoded',
  24.     'User-Agent': 'Opera/9.80 (X11; Linux i686; U; en) Presto/2.9.168 Version/11.51',
  25. })
  26.  
  27. print(content)

Espero que me puedan señalar el camino.
Saludos.
  #2 (permalink)  
Antiguo 08/10/2011, 12:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Búsqueda en Google con Python3

Lo que pasa es que google tiene varios mecanismos de seguridad para evitar que hagas un get o un post request fuera del sitio google.

Puedes leer esto en Cross-site request forgery de wikipedia.

Puedes saltarte estos mecanismo es factible pero ademas de eso tendrías que parsear html bajar las imagenes, etc..

Lo mejor sería usar la api de google para poder hacer este trabajo.
  #3 (permalink)  
Antiguo 08/10/2011, 16:56
Avatar de Hazuki  
Fecha de Ingreso: mayo-2011
Mensajes: 34
Antigüedad: 13 años, 7 meses
Puntos: 7
Respuesta: Búsqueda en Google con Python3

Bueh, finalmente lo conseguí. Gracias razpeitia, no sabía que Google tuviera una API para las búsquedas (^.^').

Aunque la verdadera razón por la que fallaba resultó ser una ridiculez. El método que usaba antes, el enviar las variables en el cuerpo de la petición, es para las peticiones POST, no GET (^_^").

Al final el código queda así:
Código Python:
Ver original
  1. import httplib2
  2. from urllib.parse import urlencode
  3.  
  4. q = 'anime'
  5. start = 0
  6. h = httplib2.Http()
  7.  
  8. data = {
  9.     'v'      : '1.0',
  10.     'hl'     : 'en',
  11.     'q'      : q,
  12.     'rsz'    : 'large',
  13.     'imgsz'  : 'large',
  14.     'start'  : start
  15. }
  16.  
  17. response, content = h.request(
  18.     uri="http://ajax.googleapis.com/ajax/services/search/images?" + urlencode(data),
  19.     method="GET",
  20. )

Ahora sólo quedan los ajustes finales y a descargar se ha dicho. Muahaha.

Etiquetas: google, httplib2, python3
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:10.