改良版Amazonの価格データ取得

変更点は以下の通り

①関数化、クラス化した。これでほかのところから呼び出したりできるようになった

コマンドライン引数を追加したので、検索の自由度が上がった


import time
import argparse
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

class FINDING_PRICE:
    def __init__(self):
        self.search_word = ""
        self.search_item = ""
    def access_to_amazon(self):
        #アマゾンのトップページに遷移する
        #ドライバーの作成をする
        ChromeOptions = webdriver.ChromeOptions()
        ChromeOptions.add_experimental_option('excludeSwitches', [ 'enable-automation' ,'enable-logging'])
        driver = webdriver.Chrome(ChromeDriverManager().install())
        url = "https://www.amazon.co.jp/"
        driver.get(url)
        return driver
   
    def search_execute(self,driver,search_word):
        #検索語で検索を実行する
        self.search_word = search_word
        search_txtbox_selector ="#twotabsearchtextbox"
        search_button_selector ="div.nav-right #nav-search-submit-button"
        time.sleep(3)
        search_text = driver.find_element(By.CSS_SELECTOR, search_txtbox_selector)
        search_text.send_keys(self.search_word)
        time.sleep(3)
        search_button = driver.find_element(By.CSS_SELECTOR, search_button_selector)
        search_button.click()
        return driver


    def click_item_url(self,driver,search_item):
        #検索で一番目に引っかかったアイテムのURLに飛ぶ関数
        for x in list(range(2,12)): #おすすめ表示の上から11件をなめる
            item_xpath_former = "//*[@id='search']/div[1]/div[1]/div/span[1]/div[1]/div["
            item_xpath_mid = "]/div/div/div/div/div[2]/div[1]/h2/a"
            item_xpath_later = "/span"
            item_xpath = item_xpath_former+str(x)+item_xpath_mid+item_xpath_later
            item_name_selector = driver.find_element(By.XPATH,item_xpath)
            item_name = item_name_selector.text #商品名を取得する
            item_flag = 0 #アイテムを見つけたかどうかのフラグ
            if search_item in item_name:
                item_flag = 1 #アイテムを見つけたときにフラグをたてる
                break
        if item_flag == 1:
            item_url_xpath = item_xpath_former+str(x)+item_xpath_mid #商品のリンクXpath作成      
            item_url_selector = driver.find_element(By.XPATH,item_url_xpath) #商品リンクまで移動
            item_url_selector.click() #商品リンクをクリック
            print(item_name)

        time.sleep(3)
        return driver,item_flag,item_name

    def get_price(self,driver,item_flag):
        if item_flag == 1:
            search_price_selector = ".a-price-whole"
            search_price = driver.find_element(By.CSS_SELECTOR, search_price_selector)
            price = search_price.text
            print(str(price))
        else:
            print("商品はありません")
            price = ""

        return driver,price
"""      
    driver.quit() #ドライバを閉じる
"""


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="検索キーワードとアイテム名を指定すると価格をとってきてくれるプログラム")
    parser.add_argument("search_word", help="検索キーワード")
    parser.add_argument("search_item", help="アイテム名")
    args = parser.parse_args()
    search_word = args.search_word
    search_item = args.search_item
    res = FINDING_PRICE()
    driver = res.access_to_amazon()
    res_search = res.search_execute(driver,search_word)
    res_click = res.click_item_url(res_search,search_item)
    no_flag = res_click[1]
    driver = res_click[0]
    res.get_price(driver,no_flag)