Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Download Images from google Image search?

I want to download all Images of google image search using python . The code I am using seems to have some problem some times .My code is

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')         

After downloading few pages I am getting an error as follows:

Traceback (most recent call last):

  File "C:\Python27\img_google3.py", line 37, in <module>     dataInfo = data['results'] TypeError: 'NoneType' object has no attribute '__getitem__' 

What to do ??????

like image 915
user3116355 Avatar asked Dec 21 '13 07:12

user3116355


People also ask

How do I use Google image Search in Python?

from google_images_search import GoogleImagesSearch gis = GoogleImagesSearch('your_dev_api_key', 'your_project_cx') _search_params = { 'q': '...', 'num': 123, } # get first 123 images: gis.search(search_params=_search_params) # take next 123 images from Google images search: gis. next_page() for image in gis.

How do I download an image from Python?

Many developers consider it a convenient method for downloading any file type in Python. Once you've imported those files, create a url variable that is set to an input statement asking for the image URL. In the next line of code, implement the get() method from the requests module to retrieve the image.

How do I download a full image from Google image Search?

Try clicking on the image, then long press and choose open image in new tab. This should give you a good idea of how big the image is. Then long press and save the image. Note: the mobile version of Google Images does have search tools too (its at the extreme right in the bar with tabs for web, images, videos etc.)


1 Answers

I have modified my code. Now the code can download 100 images for a given query, and images are full high resolution that is original images are being downloaded.

I am downloading the images using urllib2 & Beautiful soup

from bs4 import BeautifulSoup import requests import re import urllib2 import os import cookielib import json  def get_soup(url,header):     return BeautifulSoup(urllib2.urlopen(urllib2.Request(url,headers=header)),'html.parser')   query = raw_input("query image")# you can change the query for the image  here image_type="ActiOn" query= query.split() query='+'.join(query) url="https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch" print url #add the directory for your image here DIR="Pictures" header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36" } soup = get_soup(url,header)   ActualImages=[]# contains the link for Large original images, type of  image for a in soup.find_all("div",{"class":"rg_meta"}):     link , Type =json.loads(a.text)["ou"]  ,json.loads(a.text)["ity"]     ActualImages.append((link,Type))  print  "there are total" , len(ActualImages),"images"  if not os.path.exists(DIR):             os.mkdir(DIR) DIR = os.path.join(DIR, query.split()[0])  if not os.path.exists(DIR):             os.mkdir(DIR) ###print images for i , (img , Type) in enumerate( ActualImages):     try:         req = urllib2.Request(img, headers={'User-Agent' : header})         raw_img = urllib2.urlopen(req).read()          cntr = len([i for i in os.listdir(DIR) if image_type in i]) + 1         print cntr         if len(Type)==0:             f = open(os.path.join(DIR , image_type + "_"+ str(cntr)+".jpg"), 'wb')         else :             f = open(os.path.join(DIR , image_type + "_"+ str(cntr)+"."+Type), 'wb')           f.write(raw_img)         f.close()     except Exception as e:         print "could not load : "+img         print e 

i hope this helps you

like image 105
rishabhr0y Avatar answered Sep 28 '22 04:09

rishabhr0y