Error 503 al intentar acceder a Google Patents usando python

Anteriormente, hoy pude extraer datos de Google Patents usando el siguiente código

import urllib2 url = 'http://www.google.com/search?tbo=p&q=ininventor:"John-Mudd"&hl=en&tbm=pts&source=lnt&tbs=ptso:us' req = urllib2.Request(url, headers={'User-Agent' : "foobar"}) response = urllib2.urlopen(req) 

Ahora cuando voy a ejecutarlo obtengo el siguiente error 503. Solo había repasado este código tal vez 30 veces (estoy tratando de obtener todas las patentes de una lista de 30 personas).

 HTTPError Traceback (most recent call last)  in () ----> 1 response = urllib2.urlopen(req) C:\Python27\lib\urllib2.pyc in urlopen(url, data, timeout) 124 if _opener is None: 125 _opener = build_opener() --> 126 return _opener.open(url, data, timeout) 127 128 def install_opener(opener): C:\Python27\lib\urllib2.pyc in open(self, fullurl, data, timeout) 404 for processor in self.process_response.get(protocol, []): 405 meth = getattr(processor, meth_name) --> 406 response = meth(req, response) 407 408 return response C:\Python27\lib\urllib2.pyc in http_response(self, request, response) 517 if not (200 <= code  519 'http', request, response, code, msg, hdrs) 520 521 return response C:\Python27\lib\urllib2.pyc in error(self, proto, *args) 436 http_err = 0 437 args = (dict, proto, meth_name) + args --> 438 result = self._call_chain(*args) 439 if result: 440 return result C:\Python27\lib\urllib2.pyc in _call_chain(self, chain, kind, meth_name, *args) 376 func = getattr(handler, meth_name) 377 --> 378 result = func(*args) 379 if result is not None: 380 return result C:\Python27\lib\urllib2.pyc in http_error_302(self, req, fp, code, msg, headers) 623 fp.close() 624 --> 625 return self.parent.open(new, timeout=req.timeout) 626 627 http_error_301 = http_error_303 = http_error_307 = http_error_302 C:\Python27\lib\urllib2.pyc in open(self, fullurl, data, timeout) 404 for processor in self.process_response.get(protocol, []): 405 meth = getattr(processor, meth_name) --> 406 response = meth(req, response) 407 408 return response C:\Python27\lib\urllib2.pyc in http_response(self, request, response) 517 if not (200 <= code  519 'http', request, response, code, msg, hdrs) 520 521 return response C:\Python27\lib\urllib2.pyc in error(self, proto, *args) 442 if http_err: 443 args = (dict, 'default', 'http_error_default') + orig_args --> 444 return self._call_chain(*args) 445 446 # XXX probably also want an abstract factory that knows when it makes C:\Python27\lib\urllib2.pyc in _call_chain(self, chain, kind, meth_name, *args) 376 func = getattr(handler, meth_name) 377 --> 378 result = func(*args) 379 if result is not None: 380 return result C:\Python27\lib\urllib2.pyc in http_error_default(self, req, fp, code, msg, hdrs) 525 class HTTPDefaultErrorHandler(BaseHandler): 526 def http_error_default(self, req, fp, code, msg, hdrs): --> 527 raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 528 529 class HTTPRedirectHandler(BaseHandler): HTTPError: HTTP Error 503: Service Unavailable 

Disparo en la conjetura oscura:

¿Miró para ver si había un “encabezado de rebash después de” en la respuesta? Es una posibilidad real con 503.

Desde RFC 2616 :

14.37 Reintentar despues

El campo de encabezado de respuesta Retry-After se puede usar con una respuesta 503 (Servicio no disponible) para indicar cuánto tiempo se espera que el servicio no esté disponible para el cliente solicitante. Este campo PUEDE también usarse con cualquier respuesta 3xx (Redirección) para indicar el tiempo mínimo que se le pide al usuario-agente que espere antes de emitir la solicitud redirigida. El valor de este campo puede ser una fecha HTTP o un número entero de segundos (en decimal) después de la hora de la respuesta. Retry-After = “Retry-After” “:” (HTTP-date | delta-seconds)

Dos ejemplos de su uso son Reintentar-Después: viernes, 31 de diciembre de 1999 23:59:59 GMT Reintentar-Después: 120

En el último ejemplo, el retraso es de 2 minutos.

TOS de Google prohíbe las consultas automatizadas, lamentablemente. Es casi seguro que se detectó que “no era nada bueno”.

fuente: https://support.google.com/websearch/answer/86640?hl=es