利益商品のリサーチ自動化を実現するために、売れ筋商品の「商品価格」「JANコード」「獲得ポイント」をリスト化する方法です。
売れ筋商品を検索する
まず手作業で、各ショップの売れ筋商品を検索します。
- Yahoo!ショッピングのショップページにアクセスします。下記例は「コジマYahoo!店」にアクセスした結果です。ストア内検索で、キーワードに何も入れずに「ストア内検索」を押します。
- 検索結果が表示されるので、お好みに合わせて検索条件を変更します。今回は以下の変更を行います。
対象を「新品」、ソートを「売れている順」、表示件数を「100件表示」に変更します。また、詳細条件を指定するために、「絞り込み条件を開く」を押します。 - カテゴリを「パソコン・周辺機器・プリンター」に、価格の上限を「50000円」に設定します。
- 上記で指定した条件での検索結果が下部分に表示されます。検索結果のURLをブラウザ上部で確認します。
- URLを確認すると、設定した条件がURLにどのように記載されているかが分かります。
①「pt=5000」:価格上限50,000円
②「strcid=5aa2ba1d5d5」:パソコン・周辺機器・プリンターのカテゴリ
③「X=4」:売れている順でソート
④「n=100」:100件表示
⑤「used=new」:新品のみを対象 - 検索結果の別のページを表示してURLを確認すると分かりますが、1ページ目を表示したい場合には「page=0」、2ページ目を表示したい場合には「page=1」と設定すれば良いことが分かります。
商品リストの作成
商品ページへのリンク部分のソースコードは以下のようになっています。全ての商品が「class="elImageLink"」と同じCLASS名となっています。
検索結果のページを切り替えながら、商品ページのURLを抽出するプログラムは以下のようになります。
item_url_list = []
for page in range(0, 2):
url = 'https://store.shopping.yahoo.co.jp/y-kojima/search.html?pt=50000&strcid=5aa2ba1d5d5&n=100&X=4&page=' + str(page)
driver.get(url)
for elem in driver.find_elements(By.CLASS_NAME, 'elImageLink'):
item_url_list.append(elem.get_attribute('href'))
1行目:
商品ページのURLを格納するための空の配列を準備します。
2行目:
検索結果のページごとのループ文です。「range(0,2)=0, 1」となりますので、1ページ目(page=0)と2ページ目(page=1)のループ文となります。
3行目:
ページ番号も含めたURLを作成します。2行目のpageは整数型なので、str(page)とすることで文字列に変換してからURLの末尾に追加しています。
4行目:
指定したURLのページを取得します。
5行目:
「By.CLASS_NAME」はCLASSを指定してタグを検索する時に使います。今回の例ではCLASS="elImageLink"のタグを検索しています。検索結果として商品ページへのリンクである<a>タグがヒットします。
商品が複数あるので複数の<a>がヒットします。for文は複数ヒットした<a>を一つずつ処理するためのループ文となります。
6行目:
URLとして「href」の属性値を取得し、配列に格納します。
商品ページから商品価格を抽出
ソースコードを見ればわかりますが、商品価格は色々なタグに記載されています。今回は上記のタグから商品価格を抽出します。
item_price = driver.find_element(By.XPATH, '//meta[@property="product:price:amount"]').get_attribute('content')
「By.XPATH」はPATHを指定してタグを検索する時に使います。今回の例では、property="product:price:amount"である<meta>タグを検索しています。そして、検索された<meta>タグの「content」属性値を取得します。
商品ページからJANコードを抽出
JANコードも色々なタグに記載されていますが、今回は上記のタグからJANコードを抽出します。
jan_code = driver.find_element(By.NAME, 'seller_managed_item_id').get_attribute('value')
「By.NAME」はNAME属性を指定してタグを検索する時に使います。今回の例では、name="seller_managed_item_id"である<input>タグを検索しています。そして、検索された<input>タグの「value」属性値を取得します。
商品ページから獲得ポイントを抽出
今回は上記のタグから獲得ポイントを抽出します。
item_point = driver.find_element(By.CLASS_NAME, 'elPointRate').text
「By.CLASS_NAME」はCLASS属性を指定してタグを検索する時に使います。今回の例では、class="elPointRate"である<p>タグを検索しています。そして、検索された<p>タグのテキストを取得します。
ただし、獲得ポイントはログインしないと正確には表示されないので参考程度となります。
Pythonサンプルプログラム
from selenium import webdriver
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
CHROMEDRIVER = 'C:/demo/chromedriver.exe' # Chrome Driverのパス# Chromeブラウザを起動する
chrome_service = fs.Service(executable_path=CHROMEDRIVER)
driver = webdriver.Chrome(service=chrome_service)
item_url_list = []
# 検索結果をページごとにループ処理
for page in range(0, 2):
url = 'https://store.shopping.yahoo.co.jp/y-kojima/search.html?pt=50000&strcid=5aa2ba1d5d5&n=100&X=4&page=' + str(page)
driver.get(url)
# 検索結果のページから商品ページURLを抽出する
for elem in driver.find_elements(By.CLASS_NAME, 'elImageLink'):
item_url_list.append(elem.get_attribute('href'))
# 商品ページのURLから「商品価格」「JANコード」「獲得ポイント」を抽出する
item_list = []
for item_url in item_url_list:
driver.get(item_url)
item_price = driver.find_element(By.XPATH, '//meta[@property="product:price:amount"]').get_attribute('content')
jan_code = driver.find_element(By.NAME, 'seller_managed_item_id').get_attribute('value')
item_point = driver.find_element(By.CLASS_NAME, 'elPointRate').text
# JANコード、URL、商品価格、獲得ポイントをセットにして格納
item = [jan_code, item_url, item_price, item_point]
item_list.append(item)
# 抽出結果を表示する
print(item_list)
# Chromeを終了する
driver.close()
driver.quit()
以下はサンプルプログラムの実行結果です。
サンプルプログラムの動かし方は以下の記事を参考にしてください。