見出し画像

「無在庫販売在庫管理」ウェブスクレイピングで楽天市場の商品価格を自動で取得する方法(コピペでOK!)

1.はじめに

無在庫販売に取り組んでいる方にとって、在庫管理は非常に重要な作業です。実際に商品を仕入れる際に、仕入れ価格が高騰しており赤字で販売せざるを得なくなってしまった、商品が売れ仕入れようとしたがそもそも当該商品ページが消滅していた、、などは絶対に避けたいものです。そのためにはこまめな仕入れ先のチェックが必要となりますが、一つ一つのURLにアクセスし目視で価格などを確認、というように手動で行われている方も多いのが現状ではないでしょうか。手作業による管理はあまりに時間がかかるだけでなく、ミスが発生しやすいものです。複数のURLをまとめて開く方法も紹介されてはいますが、手動である以上非効率であり、推奨できる方法とは言えません。

本記事では、そのような課題を解決する方法として、Pythonを使用した「ウェブスクレイピング」を活用してECサイトの商品ページに記載されている商品価格を自動で取得し、エクセル上で一元管理する方法を詳しく解説します。本記事ではモデルのECサイトとして楽天市場を対象とします。この記事を読み実践することで、無在庫販売における在庫管理の手間を大幅に削減し、作業効率を飛躍的に向上させることが可能になります。コピーペーストのみで対応できるので、プログラミングの知識は全く必要ありません。



他の記事もチェック

以前に、【無在庫販売在庫管理】Pythonを使用したウェブスクレイピングで、Yahooショッピングの商品ページから仕入れ価格を自動取得する手法(コピペでOK)という記事を公開しました。本記事は楽天市場の商品ページをスクレイピングしますが、こちらの記事ではYahooショッピングをスクレイピングしています。Yahooショッピングでの商品価格を自動で取得する方法に関心がある方は、ぜひそちらの記事もご覧ください。
どちらの記事を読んでいただいても、知識ゼロから実践できるよう詳細に解説しております。このシリーズ記事を通じて、無在庫販売における在庫管理の効率化に役立つ情報を学べます。


この記事を読んでほしい方

この記事は、以下のような方に向けて書かれています:

  • 無在庫販売に取り組んでいる方
    仕入れ価格の管理や在庫状況の把握に多くの時間を費やされている方にとって、この記事の内容は大いに役立ちます。

  • プログラミング未経験の方
    プログラミングに触れたことがない方でも、コピーペーストのみで実装できるので、簡単に取り組めます。

  • ウェブスクレイピングに興味がある方
    ウェブスクレイピングの実行方法の全体像をつかむことができます。

  • 競合他社の価格設定を把握したい方
    ECモールへ出店しており、競合他社の価格戦略を分析したい方にとっても役立ちます。

それでは次のセクションから、内容の方に入っていきましょう!
ウェブスクレイピングという言葉を初めて聞いた方もいらっしゃると思うので、そもそもウェブスクレイピングとは何かという所から解説していきます。目的のタスクはコピペで実現できるので理解していただく必要はありません。説明が不要な方は適宜読み飛ばしてください。


2.ウェブスクレイピングとは

ウェブスクレイピングとは、ウェブサイトからデータを自動的に取得し、必要な情報を抽出する技術のことです。手動でウェブページを閲覧し、情報をコピーする作業をプログラムによって自動化できるため、特に繰り返し同じ作業を行う場合に非常に役立ちます。

ウェブスクレイピングの仕組み

  1. ウェブページのデータを取得する
    ウェブスクレイピングでは、まずウェブサイトのHTMLデータを取得します。このHTMLデータには、ウェブページに表示されるテキストや画像、リンクなどの情報が含まれています。

  2. HTML構造を解析する
    次に、取得したHTMLデータを解析して、必要な情報を特定します。HTMLはツリー構造になっており、特定の要素(例: 商品名、価格)を取り出すことができます。

  3. 必要なデータを抽出する
    解析したデータから、特定の情報を抽出します。例えば、楽天市場の商品ページから価格情報を取得する場合、HTML内の価格を示す要素(<span>や<meta>タグなど)を特定してデータを取り出します。

  4. データを保存する
    最後に、抽出したデータをCSVやエクセルファイルに保存することで、後から簡単に利用できるようになります。


ウェブスクレイピングの用途

ウェブスクレイピングは、さまざまな分野で活用されています。以下はその一例です:

  1. 価格比較サイトの作成
    複数のECサイトから価格情報を収集して比較表を作成。

  2. マーケットリサーチ
    楽天市場やAmazonからのレビューや評価を収集し、商品開発や販売戦略に活用。

  3. データ分析
    大量のウェブデータを収集し、トレンドや需要を分析。

  4. 業務の効率化
    無在庫販売における商品価格や在庫情報の自動取得。


ウェブスクレイピングの注意点

ウェブスクレイピングは便利な技術ですが、いくつか注意すべき点があります:

  1. ウェブサイトの利用規約を確認する
    多くのウェブサイトには利用規約があり、スクレイピングを禁止している場合があります。スクレイピングするウェブサイトの利用規約を事前に確認しておきましょう。

  2. アクセス頻度に注意する
    サーバーに過剰な負荷をかけると、IPアドレスがブロックされることがあります。スクレイピングを実行する際は、適切な間隔を設定しましょう。

  3. データの正確性を検証する
    ウェブサイトの構造が変更されると、スクリプトが正しく動作しなくなる可能性があります。定期的にコードを見直し、テストを行うことが重要です。

それでは次のセクションから実際に、ウェブスクレイピングで楽天市場の商品ページから価格情報を取得するための作業に入っていきます!ひとつひとつ丁寧に解説するので安心してください!


3.Python環境の準備

Pythonはこの作業を行うために必要なプログラミング言語です。Pythonをお使いのパソコンにインストールし、Pythonを使えるようにする必要があります。以下の手順でパソコンにインストールします。

ステップ 1: Pythonのダウンロード

  1. 公式サイトにアクセス

    • まず、Pythonの公式サイト(https://www.python.org/)にアクセスします。

    • ホームページ上部のメニューから「Downloads」をクリックします。

  2. 最適なバージョンを選ぶ

    • 特定の古いバージョンが必要な場合を除き、最新のバージョンのPythonをダウンロードしてください。(ウェブスクレイピング以外の機能を実装しようとすると最新版では対応できない場合もありますが、この記事で作成するウェブスクレイピングにおいては問題ありません。)

  3. 64ビット版と32ビット版の確認(Windowsのみ)

    • Windowsユーザーは、自分のパソコンが64ビットか32ビットかを確認する必要があります。

    • 確認方法:

      • 「スタートメニュー」→「設定」→「システム」→「バージョン情報」→「システムの種類」を確認します。

    • 使用するパソコンがもし32ビットなら32ビット版をダウンロードしてください(64ビットのパソコンでは、64ビット版、32ビット版どちらも使用可能です)。


ステップ 2: Pythonのインストール

  1. ダウンロードしたインストーラーを実行

    • ダウンロードが完了したら、インストーラーをダブルクリックして開きます。

  2. インストールオプションの確認

    • 最初に表示されるインストール画面で、「Add Python to PATH」 というチェックボックスに必ずチェックを入れてください。

      • この設定を有効にすることで、Pythonをどのフォルダからでも簡単に使えるようになります。

  3. インストールを開始

    • 「Install Now」または「Next」ボタンをクリックしてインストールを進めます。

    • インストールが完了すると「Setup was successful」と表示されます。

次のステップ

これで、Pythonのインストールが完了し、お使いのパソコン上でPythonが使えるようになりました。次のセクションでは、スクレイピングに必要な「ライブラリ」と呼ばれる追加の機能をインストールし、楽天市場から商品価格を取得するための準備を整えていきます。初心者の方でもわかりやすいように、詳しい手順を解説しますので、このまま進めていきましょう!


4. 必要なライブラリ(ツール)の準備

Pythonでは、「ライブラリ」と呼ばれる追加機能を利用することで、複雑な作業を簡単に実現できます。今回のスクレイピングでは、以下のライブラリを使用します。それぞれの持つ役割も解説しますが理解したり覚える必要はありません、正しくインストールすることが大切です。インストール方法は非常に簡単です。

今回使用するライブラリとその役割

  1. requests

    • 役割: ウェブサイトからHTMLデータを取得します。ウェブページをプログラムで読み取るための基盤となるライブラリです。

    • : 楽天市場の商品ページのHTMLデータを取得する。

  2. BeautifulSoup

    • 役割: 取得したHTMLデータを整理し、特定の情報(例: 商品名や価格)を簡単に抽出できるようにします。

    • : HTML内の価格が記載されたタグを探して値を取り出す。

  3. openpyxl

    • 役割: エクセルファイル(.xlsx)の読み書きを行います。取得したデータをエクセルファイルに保存したり、既存のファイルを操作する際に必要です。

    • : 楽天市場から取得した価格情報をエクセルファイルに保存する。


ライブラリのインストール方法

Pythonでライブラリを使用するためには、事前に「インストール」という作業が必要です。この作業は、Pythonに新しい機能を追加するプロセスと考えるとわかりやすいでしょう。

ライブラリのインストールには、「コマンドプロンプト(Windows)」または「ターミナル(Mac)」 を使用します。

コマンドプロンプト(またはターミナル)とは?
コマンドプロンプト(Windowsの場合)やターミナル(Macの場合)は、パソコンに命令を直接入力して実行するためのツールです。例えば、新しい機能(ライブラリ)をPythonに追加するときに使用します。一方、後述しますがテキストエディタはスクリプトを書くためのツールで、スクリプトを書いたり実行するための操作性に優れています。ただし、ライブラリのインストールはテキストエディタでは行えないため、コマンドプロンプトを使用する必要があります。

ライブラリのインストール手順

  1. コマンドプロンプトまたはターミナルを開く

    • Windowsの場合:
      「スタートメニュー」から「cmd」もしくは「コマンドプロンプト」と検索し、コマンドプロンプトを開きます。

    • Macの場合:
      「Finder」から「アプリケーション」→「ユーティリティ」→「ターミナル」を開きます。

  2. 次のコマンドを入力
    以下のコマンドをそのままコピーペーストして、Enterキーを押します。これだけでインストールが完了します:

pip install requests beautifulsoup4 openpyxl

  3.インストールの完了を確認
コマンドの実行後に、以下のようなメッセージが表示されれば、インストールは正常に完了しています:

Successfully installed requests beautifulsoup4 openpyxl

 4.インストール状況を確認
万が一正しくインストールされていない場合は、以下のコマンドでライブラリがインストールされているか確認できます:

pip list

インストール済みのライブラリ一覧が表示され、requests, beautifulsoup4, openpyxl が含まれていれば成功です。

次のステップ

これで、スクレイピングに必要なライブラリが準備できました。次のセクションでは、楽天市場の商品情報を記録するエクセルファイルの作成方法を解説します。このエクセルファイルを使ってデータを整理し、価格情報を効率的に管理する準備を進めましょう!


5.商品を記録したExcelファイルの作成

次に仕入れる予定の商品情報を記載したエクセルファイルを用意します。エクセルファイルをプログラムが読み込み、そこに記載されているURLにアクセスし、取得した情報を同じエクセルファイルに書き込むというイメージです。

  1. エクセルを開いて新しいファイルを作ります。

  2. A列に「商品名」、B列に「URL」、C列に「価格」、D列に「更新日時」というヘッダーを記載します。

  3. 任意の商品名と、任意のYahooショッピングの商品ページのリンクをそれぞれA列とB列に入力します。C列とD列はプログラムが取得した価格情報と更新日時が記録される列として空欄のままにします。URLはエクセルのメニューから「挿入」→「リンク」と進んで記述してください。

4.ファイル名を product_prices_rakuten.xlsx として保存してください(ここ重要です、Pythonのスクリプトでこのファイル名を指名するので違わないようにしてください)。

5.下のサンプルファイルをダウンロードして使用することもできます。


6.価格情報を取得するスクリプト

以下のスクリプトが、エクセルファイル上に記載されているURLにアクセスし、楽天市場の各商品ページから価格データを取得するスクリプトです。

import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
from datetime import datetime

# 価格を取得する関数
def fetch_price(url):
    """
    指定された楽天市場の商品ページのURLから価格を取得する関数。
    """
    try:
        # ウェブページを取得
        response = requests.get(url)
        response.raise_for_status()

        # HTMLの内容を解析
        soup = BeautifulSoup(response.text, 'html.parser')

        # priceCalculationConfigから価格を取得
        price_div = soup.find("div", id="priceCalculationConfig")
        if price_div and price_div.get("data-price"):
            price = int(price_div["data-price"])
            return price
        else:
            raise ValueError("価格情報が見つかりません")
    except Exception as e:
        print(f"価格の取得中にエラーが発生しました: {e}")
        return None

# エクセルファイルを更新する関数
def update_excel(file_path):
    """
    エクセルファイルを読み込み、価格を取得して更新する関数。
    """
    try:
        # エクセルファイルを開く
        workbook = load_workbook(file_path)
        sheet = workbook.active

        # 列ヘッダー名と列番号の対応を取得
        headers = {cell.value: cell.column for cell in sheet[1]}

        # 必要な列ヘッダーが存在するか確認
        required_headers = ['商品名', 'URL', '価格', '更新日時']
        for header in required_headers:
            if header not in headers:
                raise ValueError(f"列ヘッダーに「{header}」がありません。エクセルファイルを確認してください。")

        # 各行のデータを更新
        for row in range(2, sheet.max_row + 1):
            product_name = sheet.cell(row=row, column=headers['商品名']).value
            url = sheet.cell(row=row, column=headers['URL']).value

            if url:
                print(f"商品「{product_name}」の価格を取得中...")
                current_price = fetch_price(url)
                sheet.cell(row=row, column=headers['価格'], value=current_price if current_price is not None else "価格情報なし")
                # 更新日時を記録
                sheet.cell(row=row, column=headers['更新日時'], value=datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

        # ファイルを保存
        workbook.save(file_path)
        print("エクセルファイルを更新しました。")

    except Exception as e:
        print(f"エクセルファイルの更新中にエラーが発生しました: {e}")

# 使用方法
file_path = "product_prices_rakuten.xlsx"  # エクセルファイルの場所
update_excel(file_path)

7.スクリプトの実行方法

エクセルファイルとスクリプトが用意できたので、あとはこのスクリプトを保存し実行するのみです。このスクリプトを保存するにはテキストエディタを使用するのですが、本記事ではPythonをダウンロードするときに共にダウンロードされる「IDLE」というテキストエディタを使用します。

  1. IDLEを開く
    Pythonをインストールすると「IDLE」というツールが一緒にインストールされます。

    • Windowsの場合:スタートメニューから「IDLE」と検索して起動します。

    • Macの場合:Finderを開き、「アプリケーション」フォルダ内の「Python3.x」フォルダ(3.xはインストールしたPythonのバージョン)を探します。その中にある「IDLE.app」をクリックして起動します。

  2. 新しいスクリプトファイルを作成
    IDLEの「File」メニューから「New File」を選択し、新しいウィンドウを開きます。

  1. コードを貼り付ける
    上記の、価格情報を取得するコードをコピーして、新しいウィンドウに貼り付けます。

  2. ファイルを保存する
    「File」→「Save As」でファイルを保存します。Pythonのスクリプトを保存する際、例えば import_product_prices_rakuten.py という名前で保存します。ファイル名は拡張子が .py であれば自由に設定できます。ただし、スクリプトファイルとエクセルファイルは同じフォルダに保存してください。これが異なるフォルダにあると、プログラムがエクセルファイルを正しく読み込むことができず、正常に動作しなくなります。

  3. スクリプトを実行する
    スクリプトを実行するにはいくつかの方法がありますが、最も簡単なやり方をご紹介します。先ほどのスクリプトを保存したウィンドウ上で、キーボードの「F5」を押します。(Macのキーボード設定によっては、F5キーを押す際に「fnキー」を同時に押す必要がある場合があります。)これだけでスクリプトが実行され、エクセルファイルが更新されます。この時エクセルファイルを一度閉じてから実行するようにしてください。エクセルファイルが閉じている状態でないとプログラムがエクセルファイルを読み込めないためです。

  4. 価格情報がきちんと取得されているか確認
    スクリプトが適切に実行されていれば商品価格と更新日時がエクセルファイルに自動的に取得されているはずです。一つ一つ手動で確認していたものがF5キーを一度押すだけでまとめて確認できるようになりました。きちんと動作することが確認出来たら、対象のURLを追加していき効率的に価格をチェックしていってください。

プログラムがURLにアクセスし、価格が自動的に取得されています。

8.実用的アイデアと発展

  • 商品情報の一元的管理: 本記事では価格情報を取得するためエクセルファイルを作成しましたが、このファイルは新たな列を挿入したり、「価格」と「URL」の列を入れ替えたり自由に改変することができます。プログラムはエクセルファイルに「商品名」「URL」「価格」「更新日時」の列ヘッダーさえあれば正常に作動します。これら列ヘッダーと名前が被らない新たな列「販売価格」を挿入し、仕入れ価格から販売価格を求める関数を作成して販売価格を求めるなどの使い方ができます。

  • 完全自動化:本記事の通りにプログラムを実行していただくと、手動で価格をチェックすることと比べてかなりの効率化が実現しますが、Pythonのファイルを開き、F5キーを押すという作業は残ることとなります。そこでWindowsのタスクスケジューラやMacのcronなどを使用して、24時間ごとや1時間おきにというように定期的にプログラムを実行する仕組みを整えれば、これを完全に自動化することができます。

  • メール通知機能:本記事では商品価格を取得するスクリプトのみをご紹介しましたが、あらかじめ仕入れ価格に閾値を設定しておき、仕入れ価格が高騰してそれを超えた際にはメールやLINEで通知を送るという仕組みも構築することができます。今後の記事でこれらの実装方法もご紹介していければと思います。


9.まとめ

この記事では、無在庫販売における在庫管理の効率化を目的に、楽天市場の商品価格を自動取得する方法を解説しました。Pythonを使用してスクレイピングを行う手順を初心者にもわかりやすい形で紹介し、実際に動作するスクリプトをご提供しました。

記事の要点を振り返る

  1. 楽天市場での価格取得のメリット

    • 手作業での価格チェックが不要になり、業務効率が向上します。

  2. Python環境の構築とライブラリのインストール

    • 初心者でも簡単にPythonをインストールし、必要なライブラリを準備する方法を学びました。

  3. スクリプトの実行

    • 楽天市場の商品価格を自動取得し、エクセルファイルに保存するスクリプトを実際に動かす方法を説明しました。

  4. 発展的なアイデア

    • スクリプトを定期的に実行したり、スクレイピングの結果をメールで通知する仕組みを作成することができることについても軽く触れました。

この記事を実践することで、楽天市場の商品価格を自動で取得し、在庫管理や価格設定を効率化できる仕組みを作るきっかけになると思います。もしこの記事が役に立ったと感じた場合は、ぜひ他の記事もチェックしてみてください。最後までお読みいただきありがとうございました!

いいなと思ったら応援しよう!

カズ| 越境EC×効率化
よろしければサポートをお願いします!これからもお役に立てる情報を努めて発信していきます!