特定の要素を取得できるようになったら、Pythonの画像処理ライブラリ「Pillow」を使った画像の収集を行ってみましょう。
簡単な画像の読み込み方法
Jupyter notebookのファイルと同じフォルダにサンプル画像を置き、それを読み込む方法です。
ライブラリPillow(PIL)の読み込み。(大文字と小文字の使い分けに注意してください)
from PIL import Image
画像を取得する方法はImage.open()を使います。次の例では「ken.jpg」を読み込んでいます。
img=Image.open('ken.jpg')
リサイズなど簡単な加工もできます。
取得した画像サイズを確認するには「img.size」を使います。
img.size
画像のリサイズはimg.resize()を使います。
150×150にリサイズする例
img=img.resize((150,150))
白黒変換(convert(‘L’))、回転(rotate())、ガウシアンブラー(filter())などの処理もできるようです。
画像の保存はimg.save(‘ファイル名’)とします。
img.save('sample.jpg')
画像の収集
サンプルサイトから1枚だけ画像を収集する例です。
予めJupyter notebookのファイルと同じフォルダにimgフォルダを用意しておきます。
画像収集には「import io」と「from urllib import request」が必要ですので、インポートしておきます。
from PIL import Image from selenium import webdriver import io from urllib import request browser = webdriver.Chrome() browser.get('https://itstudio.co/sample/flex-gallery/index.html') elem = browser.find_element_by_class_name('gallery-img') elem = elem.find_element_by_tag_name('img') url = elem.get_attribute('src') f = io.BytesIO(request.urlopen(url).read()) img = Image.open(f) img.save('./img/img01.jpg')
複数の画像を収集
今度は複数のクラス名を取得しますので、「find_elements_by_class_name()」を使います。
find_elements部分が複数系になっていますので間違わないようにしてください。
取得した要素はfor in 文でループさせます。
elems = browser.find_elements_by_class_name('gallery-img') for index, elem in enumerate(elems): elem = elem.find_element_by_tag_name('img') url = elem.get_attribute('src') f = io.BytesIO(request.urlopen(url).read()) img = Image.open(f) img.save('image/img{}.jpg'.format(index))