30
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでGoogle画像検索をして画像をフォルダに保存する

Last updated at Posted at 2019-11-05

こんにちは。

Pythonを使ってGoogle画像検索にアクセスして画像を取得してみました。
適当に書いて動かしているのでガバガバです。

###最初に

まあ適当にデスクトップに image的なファイルを作成してターミナルを開きましょう。

cd desktop/image

して

vim image.py

とでもしてプロジェクトを作成してください。
エディタがvimなのは僕の趣味です。

言い忘れていましたが、これにはPython3と多少のモジュールが必要になるのでインストールしてください。

pip3 install モジュール名

すればインストールできるのでモジュールエラーがでたらやってみてください。

####てことでコード書きます。

写経するなりコピペするなりしてください。

image.py
import requests
import random
import shutil
import bs4
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

ここまででモジュール関連は終わりです。
あ、sslは証明が正しくないサイトをスクレイピングしたりするのに(それ以外でも)使えるので覚えておきましょう、幸せになれます。

image.py
def image(data):
    Res = requests.get("https://www.google.com/search?hl=jp&q=" + data + "&btnG=Google+Search&tbs=0&safe=off&tbm=isch")
    Html = Res.text
    Soup = bs4.BeautifulSoup(Html,'lxml')
    links = Soup.find_all("img")
    link = random.choice(links).get("src")
    return link
def download_img(url, file_name):
    r = requests.get(url, stream=True)
    if r.status_code == 200:
        with open(file_name+".png", 'wb') as f:
            r.raw.decode_content = True
            shutil.copyfileobj(r.raw, f)
def code():
    code = ""
    for i in range(10):
        code += random.choice("aaaaaaaaaaaa")
    return code
while True:
    num = input("検索回数:")
    data = input("検索ワード:")
    for _ in range(int(num)):
        link = image(data)
        download_img(link, code())
    print("OK")
    

続いて image,download_img,codeという関数を宣言して中身を書いていきましょう。
まあ簡単に言えばスクレイピングして取得したデータをフォルダ内にaaaaaaという名前で保存しているだけです。
なので

code += random.choice("aaaaaaaaaaaa")

のaaaaaaaの名前はなんでもOKということですね。
そのあとのwhile Trueの場所ではアクセスが成功した先でワードを指定したりしているだけなのでそんなに難しくないです。
最後のPrint("OK")なんかも自分好みに変更しても楽しいかもしれませんね。
####全体
一応「全部コピペさせろよ!!!」って人のために全体を置いておきます。

image.py
import requests
import random
import shutil
import bs4
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
def image(data):
    Res = requests.get("https://www.google.com/search?hl=jp&q=" + data + "&btnG=Google+Search&tbs=0&safe=off&tbm=isch")
    Html = Res.text
    Soup = bs4.BeautifulSoup(Html,'lxml')
    links = Soup.find_all("img")
    link = random.choice(links).get("src")
    return link
def download_img(url, file_name):
    r = requests.get(url, stream=True)
    if r.status_code == 200:
        with open(file_name+".png", 'wb') as f:
            r.raw.decode_content = True
            shutil.copyfileobj(r.raw, f)
def code():
    code = ""
    for i in range(10):
        code += random.choice("aaaaaaaaaaaa")
    return code
while True:
    num = input("検索回数:")
    data = input("検索ワード:")
    for _ in range(int(num)):
        link = image(data)
        download_img(link, code())
    print("OK")

ここまでできたらターミナルを開いて
python3 image.py をします。

モジュールエラーがでたら最初に戻ってインストールしなおしてください。
このレベルのPythonのエラーは大抵ググれば解決するのでがんばってください。

エラーもなく動作すれば

検索回数:

を指定すれば

検索ワード:

となって成功すればOKとでてきて最初に作成した iamgeファイルの中にaaaaaaaa.png的な名前でワードにそった画像が保存されているはずです。

保存されていればおしまいです。お疲れ様でした。

追記
適当に書いた記事なのに思ったよりもストックされてしまって困惑しています()
Googleのスクレイピングはグレーゾーンなので自己責任でお願いします。

30
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?