・webスクレイピングして画像を保存していく方法
webスクレイピングして画像を取得して保存する方法を紹介します
まずはモジュールをインポート
import urllib
import os
保存先のディレクトリを作成します
osモジュールを使って、download というディレクトリがなければ、現在の作業ディレクトリに作るというコードです
save_dir="download/"
if not os.path.exists(save_dir):
os.mkdir(save_dir)
まずはwebページから画像の要素の src 属性を取得
img=driver.find_element(By.CSS_SELECTOR,"img['sample']").get_attribute("src")
次のコードでsrc属性の画像データを読み取ります
with urllib.request.urlopen(img) as rf:
img_data = rf.read()
次のコードのwith openで、ディレクトリ名、ファイル名を記載してwb形式で書き込みます
wb形式とは、書き込みの w と、バイナリの b です
with open(save_dir + img.jpg,"wb") as wf:
wf.write(img_data)
最後にgoogle画像検索から画像データを集めて保存するサンプルコードを紹介します
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
import os
import urllib
options = Options()
#ヘッドレスモード
#options.add_argument("--headless=new")
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options = options)
#google 画像検索ページにアクセス
driver.get('https://www.google.com/imghp?hl=ja&tab=ri&ogbl')
#画面最大化
driver.maximize_window()
driver.implicitly_wait(10)
keyword="エスプレッソ"
#検索入力、エンターキー操作
driver.find_element(By.NAME, "q").send_keys(keyword)
driver.find_element(By.NAME, "q").send_keys('\ue007')
time.sleep(1)
driver.implicitly_wait(10)
#画面スクロール
"""
height=1000
while height <60000:
driver.execute_script("window.scrollTo(0,{});".format(height))
height += 2500
time.sleep(1)
"""
#待機処理
driver.implicitly_wait(10)
#画像の要素を取得
elements = driver.find_elements(By.CSS_SELECTOR,"g-img[class='mNsIhb']>img[class='YQ4gaf']")
#src属性(画像URL)を取得
img_urls=[]
for img_url in elements:
url_p=img_url.get_attribute("src")
img_urls.append(url_p)
#保存フォルダ作成、パス指定
save_dir="download/"
if not os.path.exists(save_dir):
os.mkdir(save_dir)
#バイナリデータ読み込み、保存
a=1
for img_url in img_urls:
with urllib.request.urlopen(img_url) as rf:
img_data = rf.read()
with open(save_dir + f"{keyword}画像{a}.jpg","wb") as wf:
wf.write(img_data)
a=a+1
time.sleep(1)
driver.quit()
コメント