¿Descargar imágenes de Google Search usando Python da error?

Aquí está mi código:

import os import sys import time from urllib import FancyURLopener import urllib2 import simplejson # Define search term searchTerm = "parrot" # Replace spaces ' ' in search term for '%20' in order to comply with request searchTerm = searchTerm.replace(' ','%20') # Start FancyURLopener with defined version class MyOpener(FancyURLopener): version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)Gecko/20071127 Firefox/2.0.0.11' myopener = MyOpener() # Set count to 0 count= 0 for i in range(0,10): # Notice that the start changes for each iteration in order to request a new set of images for each loop url = ('https://ajax.googleapis.com/ajax/services/search/images?' + 'v=1.0&q='+searchTerm+'&start='+str(i*10)+'&userip=MyIP') print url request = urllib2.Request(url, None, {'Referer': 'testing'}) response = urllib2.urlopen(request) # Get results using JSON results = simplejson.load(response) data = results['responseData'] dataInfo = data['results'] # Iterate for each result and get unescaped url for myUrl in dataInfo: count = count + 1 my_url = myUrl['unescapedUrl'] myopener.retrieve(myUrl['unescapedUrl'],str(count)+'.jpg') 

Pero después de descargar algunas imágenes me sale el siguiente error:

 Traceback (most recent call last): File "C:\Python27\img_google3.py", line 37, in dataInfo = data['results'] TypeError: 'NoneType' object has no attribute 'getitem' 

¿Qué podría estar causando esto?

Tengo que descargar imágenes de Google, como parte de las redes neuronales de entrenamiento para la clasificación de imágenes.

El mensaje de error le indica que los results['responseData'] == None . Debe ver lo que realmente obtiene en los results (por ejemplo, print(results) ) para averiguar cómo acceder a los datos que desea.

Me sale lo siguiente cuando se produce el error:

 {u'responseData': None, # hence the error u'responseDetails': u'out of range start', # what went wrong u'responseStatus': 400} # http response code for "Bad request" 

Finalmente, carga una url (es decir, https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=parrot&start=90&userip=MyIP ) donde los resultados de la búsqueda simplemente no son tan altos. Obtengo un contenido sensible en los results para números más bajos: ...&start=0&...

Debe comprobar si recibe alguna devolución, por ejemplo:

 if results["responseStatus"] == 200: # response was OK, do your thing 

Además, puede simplificar el código de creación de url y guardar en la concatenación de cadenas:

 template = 'https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q={}&start={}&userip=MyIP' url = template.format(searchTerm, str(i * 10))