見出し画像

Python seleniumでAmazonから複数画像を取得する【コピペ完結】

解説動画はこちら

それでは実際のコードは↓の通りです。

注意事項

検索窓のidがランダムで動作環境により変更される仕様です。
力業ではありますが、検索窓のelementが見つからないエラーが出る場合は

#検索窓
Word = "キーボード"
driver.find_element(By.ID, "twotabsearchtextbox").send_keys(Word)

上のコードを下のように書き換えるだけ

try:
    driver.find_element(By.ID, "nav-bb-search").send_keys(Word)
except :
    driver.find_element(By.ID, "twotabsearchtextbox").send_keys(Word)
    

コード自体は綺麗ではないですが、個人で使う分には十分です。

コード全体


# -*- coding: utf-8 -*-
"""
Created on Wed Oct 12 16:23:14 2022

@author: Tomita
"""

# import
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary
from selenium.common.exceptions import NoSuchElementException

# wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

# selenium 4.0 ↑
from selenium.webdriver.common.by import By
from time import sleep


chrome_options = Options()
# chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options) 

HREFS = []

# URL開く
driver.get("https://www.amazon.co.jp/ref=nav_logo")
# 待機処理
# driver.implicitly_wait(10)
sleep(10)
wait = WebDriverWait(driver=driver, timeout=60)

#検索窓
Word = "キーボード"
try:
    driver.find_element(By.ID, "nav-bb-search").send_keys(Word)
except :
    driver.find_element(By.ID, "twotabsearchtextbox").send_keys(Word)
    
sleep(1)
driver.find_element(By.ID,"nav-search-submit-button").click()

while True:
    #待機処理
    wait.until(EC.presence_of_all_elements_located)
  #商品URLの取得
    for URL in URLS:
        URL = URL.get_attribute("href")
        print("[INFO] URL :", URL)
        HREFS.append(URL)
    
#商品詳細の取得

for HREF in HREFS:
    driver.get(HREF)
    # title
    title = driver.find_element(By.ID, "productTitle").text
    print("[INFO]  title :", title)
    # price 
    price = driver.find_element(By.CSS_SELECTOR, 'div.aok-align-center > span > span > span.a-price-whole').text
    print("[INFO]  price :", price)
    # img
    # img = driver.find_element(By.XPATH, '//div[@id="imgTagWrapperId"]/img').get_attribute("src")
    # print("[INFO]  img :", img)
    
    # 複数画像取得
    images_btn = driver.find_elements(By.CSS_SELECTOR, "li.a-spacing-small.item.imageThumbnail.a-declarative > span > span > span > input")
    for index, image_btn in enumerate(images_btn, start=1):
        # input要素を一つずつクリック
        image_btn.click()
        sleep(5)
        wait.until(EC.presence_of_all_elements_located)
        try:
            img = driver.find_element(By.XPATH, f'(//div[@class="imgTagWrapper"]/img)[{index}]').get_attribute("src")
            print("[INFO]  img :", img)
        except NoSuchElementException:
            pass

このコードを持っているだけで、例えばASINが分かれば画像を抽出するツールなんかも作れますね。


この記事が気に入ったらサポートをしてみませんか?