Pythonでスクレイピング(3)seleniumで画像収集

lecture

特定の要素を取得できるようになったら、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))
タイトルとURLをコピーしました