Google画像をスクレイピングしてみよう!!

※ 過去に書いた記事を載せています。今動作するかは不明。。。。

すみっコぐらしをめっちゃ好きでLineスタンプはすべてコンプリートしています*.⋆( ˘̴͈́ ॢ꒵ॢ ˘̴͈̀ )⋆.* それは置いといて。。。。 \(・\)ソノハナシハ (/・)/コッチニオイトイテ

PCに自動的に壁紙にするのも良いよなー、でもわざわざ探すのも面倒だしなーってことで、 画像スクレイピングで、すみっコぐらしを取得しよう!!っと思い紹介。

さて、はじめに、画像を取るにしても元ネタを探さなければなりません。 こういうときには、Google先生がいるではありませんか!!

そこから、画像を抜き出していけば、《《《《♪♪(´▽`)ノ゛うふふ〜

それじゃ、初めてみましょうか。

まず、Google画像検索を開いて。

https://www.google.co.jp/imghp?hl=ja

に、キーワード「すみっコぐらし」を入れて見る

以下のようなアドレスが出て、Bodyには画像がいっぱい。

https://www.google.co.jp/search?hl=ja&tbm=isch&source=hp&biw=1588&bih=906&ei=k31FW5m7DMW90gTgjIzQCA&q=%E3%81%99%E3%81%BF%E3%81%A3%E3%82%B3%E3%81%90%E3%82%89%E3%81%97&oq=%E3%81%99%E3%81%BF%E3%81%A3%E3%82%B3%E3%81%90%E3%82%89%E3%81%97&gs_l=img.3..0i4k1j0j0i4k1l8.28705.29989.0.30812.5.5.0.0.0.0.172.596.2j3.5.0....0...1ac.1j4.64.img..1.4.510....0.FRb11i-VRo8

引数がいっぱいあるけど、必要でなさそうなのは削除してみる。。。。

以下を、たたいてみても問題なく取得できそう。

https://www.google.co.jp/search?hl=ja&tbm=isch&q=%E3%81%99%E3%81%BF%E3%81%A3%E3%82%B3%E3%81%90%E3%82%89%E3%81%97

ちなみに、これをURLデコードすると

https://www.google.co.jp/search?tbm=isch&q=すみっコぐらし

となる

これをたたいてHTMLを取得します。 取得できるものをChromeやFireFoxでHTMLの中を見ると以下のようになっていると思います。

スクレイピング.png

classタグの「rg_meta notranslate」てのがありますね。 たぶんこれがでサイトの細かいデータのようです。

これを一部取りだして見てみましょう。。。。

{"id":"wWMIkItAEKJTEM:","isu":"books.rakuten.co.jp","itg":0,"ity":"jpg","oh":640,"ou":"https://shop.r10s.jp/book/cabinet/5768/9784092895768.jpg","ow":435,"pt":"楽天ブックス: すみっコぐらしストーリーズ - ひみつのすみっコ生活 ...","rh":"books.rakuten.co.jp","rid":"2AQKjtQM7vPpdM","rt":0,"ru":"https://books.rakuten.co.jp/rb/13222030/","s":"すみっコぐらしストーリーズ[せきちさと]","sc":1,"st":"楽天ブックス - 楽天市場","th":272,"tu":"https://encrypted-tbn0.gstatic.com/images?q\u003dtbn:ANd9GcQBWnTHJQlhwZRDvPN4jRhT5KxV6QkCjgPner8OwAmEj0fV7E8t","tw":185}

んん?JSONですね。整形してみると。。。。

{
  "id" : "wWMIkItAEKJTEM:",
  "isu" : "books.rakuten.co.jp",
  "itg" : 0,
  "ity" : "jpg",
  "oh" : 640,
  "ou" : "https://shop.r10s.jp/book/cabinet/5768/9784092895768.jpg",
  "ow" : 435,
  "pt" : "楽天ブックス: すみっコぐらしストーリーズ - ひみつのすみっコ生活 ...",
  "rh" : "books.rakuten.co.jp",
  "rid" : "2AQKjtQM7vPpdM",
  "rt" : 0,
  "ru" : "https://books.rakuten.co.jp/rb/13222030/",
  "s" : "すみっコぐらしストーリーズ[せきちさと]",
  "sc" : 1,
  "st" : "楽天ブックス - 楽天市場",
  "th" : 272,
  "tu" : "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQBWnTHJQlhwZRDvPN4jRhT5KxV6QkCjgPner8OwAmEj0fV7E8t",
  "tw" : 185
}

URLが入っているのは、「ou」、「ru」、「tu」かな?

「tu」は、

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQBWnTHJQlhwZRDvPN4jRhT5KxV6QkCjgPner8OwAmEj0fV7E8t

googleさんがつくったサムネイル画像みたいですね。

「ru」は、

https://books.rakuten.co.jp/rb/13222030/

置いている元サイトかな?画像じゃないね。

「ou」は、

https://shop.r10s.jp/book/cabinet/5768/9784092895768.jpg

たぶんこれが、画像ですね。!!

これをダウンロードすればいいです。

それで、手順を簡単に書くと

  1. google画像検索にキーワードを入れてアクセスする
  2. 取得できたHTMLで、classタグの「rg_meta notranslate」を配列で抜き出す。
  3. そこから、「ou」というタグを見つけてその中のURLを取得
  4. 画像を保存

これだけの、かーんたーんなお・し・ご・と!!(⌒^⌒)bうふっ

実際に、Python3でこれを組んでみました。 一度ためしてみてください。 走り書きで書いたのでフォーマットぐちゃぐちゃです。ごめんなさいm(__)m

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Created on 2018/07/13.

import os
from urllib import request as req
from urllib import error
from urllib import parse
import bs4
# pip3 install bs4
from datetime import datetime

import re

keyword ='すみっコぐらし'
subPath = "./"

print("--- Start ---")
print("--- " + keyword + "画像ダウンロード" + " ---")
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

print("--- ディレクトリ作成 ---")
keywordPath=subPath + keyword

if not os.path.exists(subPath):
	os.mkdir(subPath)

if not os.path.exists(keywordPath):
	os.mkdir(keywordPath)

print("--- google画像情報サイト取得 ---")

urlKeyword = parse.quote(keyword)
url = 'https://www.google.co.jp/search?tbm=isch&q=' + urlKeyword + ''

headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",}
request = req.Request(url=url, headers=headers)
page = req.urlopen(request)

print("--- データパース ---")
html = page.read().decode('utf-8')
html = bs4.BeautifulSoup(html, "html.parser")
elems = html.select('.rg_meta.notranslate')

print("--- 画像取得 ---")

counter = 0
for ele in elems:
	ele = ele.contents[0].replace('"','').split(',')
	eledict = dict()

	# ou:のついているものが画像本体なのでそれを取り出す
	for e in ele:
		num = e.find(':')
		eledict[e[0:num]] = e[num+1:]
	imageURL = eledict['ou']
	
	pal = 'jpg'
	if '.jpg' in imageURL:
		pal = '.jpg'
	elif '.JPG' in imageURL:
		pal = '.jpg'
	elif '.png' in imageURL:
		pal = '.png'
	elif '.gif' in imageURL:
		pal = '.gif'
	elif '.jpeg' in imageURL:
		pal = '.jpeg'
	else:
		pal = '.jpg'

	counter += 1
	fileName=keywordPath+ '/' + keyword + str(counter)+pal

	try:
		# 画像取得
		img = req.urlopen(imageURL)
		localfile = open(fileName, 'wb')
		localfile.write(img.read())
		img.close()
		localfile.close()
	except :
		#エラーの場合は次のデータを取得
		continue
		
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
print("--- End ---")

今回は短いですけどこんなんでw