web-dev-qa-db-ja.com

Google画像検索結果をPythonでダウンロードする方法

この質問はこれまで何度も質問されてきましたが、すべての回答は少なくとも2年以上前のもので、現在サポートされていないajax.googleapis.com APIに基づいています。

誰か別の方法を知っていますか?私は100個ほどの検索結果をダウンロードしようとしていますが、Python APIに加えて、これを行うために多くのデスクトップ、ブラウザベース、またはブラウザアドオンプログラムを試しましたが、すべて失敗しました。

ありがとう!

13
xanderflood

目的に合わせて Googleカスタム検索 を使用します。 @ i08in'sの「 Python-google画像検索から画像をダウンロードしますか? 」の回答をご覧ください。素晴らしい説明、スクリプトサンプル、ライブラリがあります。参照。

頑張ってください!

6
Andriy Ivaneyko

Seleniumを使用してGoogle画像検索から任意の数の画像をダウンロードするには:

from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys
import os
import json
import urllib2
import sys
import time

# adding path to geckodriver to the OS environment variable
# assuming that it is stored at the same path as this script
os.environ["PATH"] += os.pathsep + os.getcwd()
download_path = "dataset/"

def main():
    searchtext = sys.argv[1] # the search query
    num_requested = int(sys.argv[2]) # number of images to download
    number_of_scrolls = num_requested / 400 + 1 
    # number_of_scrolls * 400 images will be opened in the browser

    if not os.path.exists(download_path + searchtext.replace(" ", "_")):
        os.makedirs(download_path + searchtext.replace(" ", "_"))

    url = "https://www.google.co.in/search?q="+searchtext+"&source=lnms&tbm=isch"
    driver = webdriver.Firefox()
    driver.get(url)

    headers = {}
    headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
    extensions = {"jpg", "jpeg", "png", "gif"}
    img_count = 0
    downloaded_img_count = 0

    for _ in xrange(number_of_scrolls):
        for __ in xrange(10):
            # multiple scrolls needed to show all 400 images
            driver.execute_script("window.scrollBy(0, 1000000)")
            time.sleep(0.2)
        # to load next 400 images
        time.sleep(0.5)
        try:
            driver.find_element_by_xpath("//input[@value='Show more results']").click()
        except Exception as e:
            print "Less images found:", e
            break

    # imges = driver.find_elements_by_xpath('//div[@class="rg_meta"]') # not working anymore
    imges = driver.find_elements_by_xpath('//div[contains(@class,"rg_meta")]')
    print "Total images:", len(imges), "\n"
    for img in imges:
        img_count += 1
        img_url = json.loads(img.get_attribute('innerHTML'))["ou"]
        img_type = json.loads(img.get_attribute('innerHTML'))["ity"]
        print "Downloading image", img_count, ": ", img_url
        try:
            if img_type not in extensions:
                img_type = "jpg"
            req = urllib2.Request(img_url, headers=headers)
            raw_img = urllib2.urlopen(req).read()
            f = open(download_path+searchtext.replace(" ", "_")+"/"+str(downloaded_img_count)+"."+img_type, "wb")
            f.write(raw_img)
            f.close
            downloaded_img_count += 1
        except Exception as e:
            print "Download failed:", e
        finally:
            print
        if downloaded_img_count >= num_requested:
            break

    print "Total downloaded: ", downloaded_img_count, "/", img_count
    driver.quit()

if __name__ == "__main__":
    main()

完全なコードは こちら です。

6
atif93

ラビ・ヒラニの答えを少し改善する最も簡単な方法は、これを行うことです:

from icrawler.builtin import GoogleImageCrawler

google_crawler = GoogleImageCrawler(storage={'root_dir': 'D:\\projects\\data core\\helmet detection\\images'})
google_crawler.crawl(keyword='cat', max_num=100)

ソース: https://pypi.org/project/icrawler/

3
Soumya Boral

これはどう?

https://github.com/hardikvasa/google-images-download

それはあなたが何百もの画像をダウンロードすることを可能にし、あなたの検索をカスタマイズするために選択できるたくさんのフィルターを持っています


キーワードごとに100以上の画像をダウンロードする場合、「chromedriver」とともに「Selenium」をインストールする必要があります。

ライブラリをpipにインストールした場合、またはsetup.pyファイルを実行した場合、Seleniumは自動的にマシンにインストールされます。また、マシンにChromeブラウザが必要です。chromedriverの場合:

オペレーティングシステムに基づいて適切なchromedriverをダウンロードします。

WindowsまたはMACで、何らかの理由でchromedriverで問題が発生した場合は、現在のディレクトリにダウンロードしてコマンドを実行します。

ただし、Windowsでは、chromedriverへのパスを次の形式で指定する必要があります。

C:\ complete\path\to\chromedriver.exe

Linuxでは、google chrome browserのインストールに問題がある場合は、このCentOSまたはAmazon LinuxガイドまたはUbuntuガイドを参照してください

すべてのオペレーティングシステムでは、「-chromedriver」または「-cd」引数を使用して、マシンにダウンロードしたchromedriverのパスを指定する必要があります。

3
hnvasa

私はこのスクリプトを使用してグーグル検索から画像をダウンロードしており、私のトレーニングのためにそれらを使用しています私の分類子は以下のコードでクエリに関連する100枚の画像をダウンロードできます

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
2
rishabhr0y

このライブラリ の両方として使用できます:コマンドラインツールまたはpythonライブラリ。異なる基準の画像を見つけるための多くの引数があります。

これらは、ドキュメントをpythonライブラリとして使用するために使用したものです:

from google_images_download import google_images_download   #importing the library

response = google_images_download.googleimagesdownload()   #class instantiation

arguments = {"keywords":"Polar bears,baloons,Beaches","limit":20,"print_urls":True}   #creating list of arguments
paths = response.download(arguments)   #passing the arguments to the function
print(paths)   #printing absolute paths of the downloaded images

または、次のコマンドラインツールとして:

$ googleimagesdownload --k "car" -sk 'red,blue,white' -l 10

pip install google_images_downloadでこれをインストールできます

1
Rodrigo Laguna

この問題の簡単な解決策は、pythonパッケージをインストールすることです google_images_download

pip install google_images_download

このpythonコードを使用

from google_images_download import google_images_download  

response = google_images_download.googleimagesdownload()
keywords = "Apple fruit"
arguments = {"keywords":keywords,"limit":20,"print_urls":True}
paths = response.download(arguments)
print(paths)

ダウンロードする画像の数を制御するために制限を調整します

一部の画像は破損している可能性があるため開かない

keywords文字列を変更して、必要な出力を取得します

0
Avin_ash

私は多くのコードを試しましたが、それらのどれも私のために働きません。作業コードをここに投稿しています。それが他の人を助けることを願っています。

私はPythonバージョン3.6を使用し、icrawlerを使用しています

まず、システムに icrawler をダウンロードする必要があります。

次に、以下のコードを実行します。

from icrawler.examples import GoogleImageCrawler
google_crawler = GoogleImageCrawler()
google_crawler.crawl(keyword='krishna', max_num=100)

keywordkrishnaを目的のテキストに置き換えます。

:-ダウンロードした画像にはパスが必要です。今のところ、スクリプトが置かれたのと同じディレクトリを使用しました。以下のコードでカスタムディレクトリを設定できます。

google_crawler = GoogleImageCrawler('path_to_your_folder')
0
Ravi Hirani

カスタム検索APIを使用する必要があります。便利な Explorer があります。 urllib2を使用します。開発者コンソールからアプリケーションのAPIキーを作成する必要もあります。

0

Googleimagedownloadを最大限に活用するには、pip3 installを使用して取得し、次のラッパーを使用してAPIに変換します。基本的に、再利用のためにラベルが付けられた10の大きな画像をダウンロードするコードの一部として言ったことがわかります(元の作者によるスペルミス)。 say -k = "yellow pepper"の引数を渡さないと、デフォルトで10個の赤唐辛子画像がダウンロードされます。開発者のgoogle_images_download.pyに準拠している限り、私が提供した辞書googleImageDownloaderのデフォルト引数を好きなものに変更できます。

#!/usr/bin/env python3

import sys
import subprocess
import re

def main( arguments ):
  googleImageDownloader = {'s':'large', 'l':'10', 'r':'labled-for-reuse', 'k':'red pepper'}
  for argvitem in arguments[1:]:
    argumentName = re.sub( r'^-(.*)', r'\1', argvitem )
    argumentName = re.sub( r'^-(.*)', r'\1', argumentName )
    argumentName = re.sub( r'(.*)=(.*)', r'\1', argumentName )
    value        = re.sub( r'(.*)=(.*)', r'\2', argvitem )

    googleImageDownloader[argumentName] = value

  callingString = "googleimagesdownload"
  for key, value in googleImageDownloader.items():
    if " " in value:
      value = "\"" + value + "\""

    callingString+= " -" + key + " " + value

  print( callingString )
  statusAndOutputText = subprocess.getstatusoutput( callingString )
  print( statusAndOutputText[1] )

if "__main__" == __name__:
  main( sys.argv )

したがって、-または-で引数を渡して上記のimagedownload.pyを実行するだけです。

$ python ./imagedownload.py -k="yellow pepper"

次の結果を取得するには:

googleimagesdownload -s large -l 10 -k "yellow pepper" -r labeled-for-reuse

Item no.: 1 --> Item name = yellow pepper
Evaluating...
Starting Download...
Completed Image ====> 1. paprika-vegetables-yellow-red-53008.jpe
Completed Image ====> 2. plant-fruit-orange-food-pepper-produce-vegetable-yellow-peppers-bell-pepper-flowering-plant-yellow-pepper-land-plant-bell-peppers-and-chili-peppers-pimiento-habanero-chili-137913.jpg
Completed Image ====> 3. yellow-bell-pepper.jpg
Completed Image ====> 4. yellow_bell_pepper_group_store.jpg
Completed Image ====> 5. plant-fruit-food-produce-vegetable-yellow-peppers-bell-pepper-persimmon-diospyros-flowering-plant-sweet-pepper-yellow-pepper-land-plant-bell-peppers-and-chili-peppers-pimiento-habanero-chili-958689.jpg
Completed Image ====> 6. 2017-06-28-10-23-21.jpg
Completed Image ====> 7. yellow_bell_pepper_2017_a3.jpg
Completed Image ====> 8. 2017-06-26-12-06-35.jpg
Completed Image ====> 9. yellow-bell-pepper-1312593087h9f.jpg
Completed Image ====> 10. plant-fruit-food-pepper-produce-vegetable-macro-yellow-background-vegetables-peppers-bell-pepper-vitamins-flowering-plant-chili-pepper-annex-yellow-pepper-land-plant-bell-peppers-and-chili-peppers-pimiento-habanero-chili-1358020.jpg

Everything downloaded!
Total Errors: 0
0
Eamonn Kenny