Python + Seleniumで、キーワードを入力するとAmazon商品のURLとタイトル、評価数を取得するスクリプトの紹介です。
はじめに
この記事は2023年1月18日時点のものです。
スクレイピングはサイトの要素を元に取得します。スクレイピング先のサイトのUI(ざっくりと記載すると画面)が変わると、要素も変わるので、取得できなくなる可能性があることをはじめにお伝えします。
Scraping準備
スクレイピングするための準備をします。
- seleniumのinstall
- pip install selenium
- Chrome Driverのインストール
- pip install chromedriver-binary==xxxxxx
- 「xxxxxx」はお使いのChromeのバージョンに近いバージョンを入力してください。
例えばChromeのバージョンが「109.0.5414.75」の場合「pip install chromedriver-binary==109.0.5414.74.0」になります。
早速コードの紹介
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
base_url = "https://www.amazon.co.jp/"
search_text = input("検索ワードを入力してください:")
options = webdriver.ChromeOptions()
#Web USB Bluetooth等のエラー出力を除外
options.add_argument('--log-level=3')
driver = webdriver.Chrome(options=options)
driver.get(base_url)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR,".nav-input.nav-progressive-attribute"))
)
element = driver.find_element(by=By.CSS_SELECTOR, value=".nav-input.nav-progressive-attribute")
element.send_keys(search_text)
search_click = driver.find_element(by=By.CSS_SELECTOR, value=".nav-input.nav-progressive-attribute[value="'検索'"]")
search_click.click()
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR,".s-search-results"))
)
search_nums = 7
for search_num in range(1,search_nums):
main_element = driver.find_element(by=By.CSS_SELECTOR, value=".s-main-slot.s-result-list.s-search-results.sg-row")
value = "[data-index=" + "'" + str(search_num + 1) + "'" + "]"
search_element = main_element.find_element(by=By.CSS_SELECTOR, value=value)
get_link = search_element.find_element(by=By.CSS_SELECTOR, value=".a-link-normal.s-no-outline")
link = get_link.get_attribute("href")
print("link is ",link)
get_title = search_element.find_element(by=By.CSS_SELECTOR,value=".s-title-instructions-style")
title = get_title.find_element(by=By.CSS_SELECTOR,value=".a-text-normal").text
print("title is ",title)
get_attr = search_element.find_element(by=By.CSS_SELECTOR,value=".a-section.a-spacing-none.a-spacing-top-micro")
get_star_member = get_attr.find_element(by=By.CSS_SELECTOR,value=".a-size-base.s-underline-text").text
print("star member is ",get_star_member)
time.sleep(1)
driver.close()
実行方法と結果
上記のコードのファイル名を「amazon_scraping.py」とします。
>python amazon_scraping.py
を実行することで
「検索ワードを入力してください:」とプロンプトが出るので、検索ワードを入力してください。
検索結果6つの「リンク」「タイトル」「評価数」がプロンプトに出力されます。
まだ、スクロール処理を入れていませんが、今後機会があればスクロールをして多くの検索結果を出力するようなスクリプトを紹介できればと考えています。
最後まで見てくださりありがとうございます。
参考になったら幸いです。
コメント