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の中を見ると以下のようになっていると思います。
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
たぶんこれが、画像ですね。!!
これをダウンロードすればいいです。
それで、手順を簡単に書くと
- google画像検索にキーワードを入れてアクセスする
- 取得できたHTMLで、classタグの「rg_meta notranslate」を配列で抜き出す。
- そこから、「ou」というタグを見つけてその中のURLを取得
- 画像を保存
これだけの、かーんたーんなお・し・ご・と!!(⌒^⌒)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