![見出し画像](https://assets.st-note.com/production/uploads/images/165218842/rectangle_large_type_2_67517c5de8d09ffefb4bf2b635eb88b1.png?width=1200)
【無在庫販売在庫管理】Pythonを使用したウェブスクレイピングで、Yahooショッピングの商品ページから仕入れ価格を自動取得する手法(コピペでOK)
商品の仕入れに使用するウェブページから仕入れ価格を自動取得しExcelファイルで一元管理します。
超便利スクリプトをコピペで簡単実装
この記事は、プログラミングの知識が無くてもYahooショッピングの商品価格を自動取得しExcelファイルに保存する方法を詳しく解説します。Pythonのインストール方法から説明し、スクリプトをそのままコピーペーストして実行するだけで利用できます。プログラムというと難しく感じてしまうかもしれませんが、作業効率化が目的なので細かい内容は理解しなくて大丈夫です。無在庫販売における仕入れ価格の監視に活用してください。
1.無在庫販売における在庫管理の重要性
本題に入る前にこのプログラムを作成する前提を確認しておきます。無在庫販売のメリットとしては、在庫を保管する場所が必要ない、在庫を抱えずに扱う商品点数を増やすことができるなどがありますが、反対に最大のデメリットとして在庫管理の難しさが挙げられます。具体的には、お客様に商品を販売したが仕入れ価格の高騰により赤字で販売せざるを得なくなることや、そもそも当該商品を仕入れることができなくなってしまうことが起こり得ます。
そのため仕入れる予定の商品を欠かさずチェックすることが求められるのですが、手動でこれを行うことはあまりに非効率だと言えます。そこでこの面倒な作業は全てプログラムにやらせて効率化しようという訳です。
本記事では仕入れ先ウェブサイトのサンプルとしてYahooショッピングを使用しますが、スクリプトを変更すれば、同じ手法でほとんどすべての仕入れ先に対応できます。楽天市場などはもちろんのこと、一般公開されていないB to Bサイトなども監視可能です。(一部のウェブサイトでは、短時間に大量のリクエストを送ることでサーバーに負担をかけてしまうなどの理由でウェブスクレイピングを禁止していますので対象ウェブサイトの規約に従ってください)。
2. Pythonのインストール方法
さてここから本題に入っていきます。Pythonはこの作業を行うために必要なプログラミング言語です。以下の手順でパソコンにインストールします。
ステップ 1: Pythonのダウンロード
2.1.1 Pythonの公式サイト にアクセスします。
2.1.2 ホームページにある「Download」というボタンをクリックします。
2.1.3 使用しているパソコン(WindowsやMac)に合ったバージョンを選んでダウンロードします。Windows用のPythonには32ビット版と64ビット版があります。使用するパソコンがもし32ビットなら32ビット版をダウンロードしてください(64ビットのパソコンであれば、64ビット版、32ビット版どちらも使用可能です)。
ステップ 2: Pythonをインストールする
ダウンロードしたファイルを開くと、インストール画面が表示されます。
「次へ」ボタンを押して進みます。
「Add Python to PATH」という項目にチェックを入れてからインストールを開始してください。
インストールが終わるとPythonが使えるようになります。
3. 必要なツール(ライブラリ)の準備
Pythonでは、「ライブラリ」という追加の機能を使って様々な作業を簡単に行えます。
今回使うライブラリ:
requests:ウェブからデータを取得するため
BeautifulSoup:ウェブページの内容を整理して読み取るため
openpyxl:エクセルファイルを読み書きするため
ライブラリのインストール方法
ライブラリをインストールするには「コマンドプロンプト」を使用します。
コマンドプロンプトとは?
コマンドプロンプトは、パソコンに命令を直接入力して実行するためのツールです。例えば、新しい機能(ライブラリ)をPythonに追加するときに使用します。一方、後述しますがテキストエディタはスクリプトを書くためのツールで、スクリプトを書いたり実行するための操作性に優れています。ただし、ライブラリのインストールはテキストエディタでは行えないため、コマンドプロンプトを使用する必要があります。
インストール手順
コマンドプロンプトを開きます。
Windowsの場合:「スタートメニュー」から「cmdもしくはコマンドプロンプト」と検索して開きます。
Macの場合:「ターミナル」を開きます。
次のコマンドをコピーペーストし、Enterキーを押します:
pip install requests beautifulsoup4 openpyxl
…….was successfully installed と表示されていれば正常にインストールできています。これで準備完了です。
4. 商品情報を記録したエクセルファイルの作成
次に仕入れる予定の商品情報を記載したエクセルファイルを用意します。エクセルファイルをプログラムが読み込み、そこに記載されているURLにアクセスし、取得した情報を同じエクセルファイルに書き込むというイメージです。
エクセルを開いて新しいファイルを作ります。
A列に「商品名」、B列に「URL」、C列に「価格」、D列に「更新日時」というヘッダーを記載します。
任意の商品名と、任意のYahooショッピングの商品ページのリンクをそれぞれA列とB列に入力します。C列とD列はプログラムが取得した価格情報と更新日時が記録される列として空欄のままにします。URLはエクセルのメニューから「挿入」→「リンク」と進んで記述してください。
![](https://assets.st-note.com/img/1733815663-IjzURuLpfC2Xq3HAlMer6iZb.png?width=1200)
4.ファイル名を product_prices_yahoo.xlsx として保存してください(ここ重要です、Pythonのスクリプトでこのファイル名を指名するので違わないようにしてください)。
5.下のサンプルファイルをダウンロードして使用することもできます。
5. Yahooショッピング商品ページからデータを取得
以下のスクリプトが、エクセルファイル上に記載されているURLにアクセスし、Yahooショッピングの商品ページから価格データを取得するスクリプトです。
import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
from datetime import datetime
def fetch_price(url):
"""
指定されたURLからmetaタグを使用して価格を取得する関数。
"""
try:
# ウェブページを取得
response = requests.get(url)
response.raise_for_status()
# HTMLの内容を解析
soup = BeautifulSoup(response.text, 'html.parser')
# metaタグで価格を取得
price_meta = soup.find("meta", property="product:price:amount")
if price_meta and price_meta.get("content"):
price = float(price_meta["content"].strip())
return price
else:
raise ValueError("価格情報がmetaタグに見つかりません")
except Exception as e:
print(f"価格の取得中にエラーが発生しました: {e}")
return None
def update_excel(file_path):
"""
エクセルファイルを読み込み、価格を取得して更新する関数。
"""
# エクセルファイルを開く
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}」がありません。エクセルファイルを確認してください。")
# 列番号を取得
url_col = headers['URL']
price_col = headers['価格']
timestamp_col = headers['更新日時']
# 各行のデータを更新
for row in range(2, sheet.max_row + 1):
product_name = sheet.cell(row=row, column=headers['商品名']).value
url = sheet.cell(row=row, column=url_col).value
if url:
print(f"商品「{product_name}」の価格を取得中...")
current_price = fetch_price(url)
sheet.cell(row=row, column=price_col, value=current_price if current_price is not None else "価格情報なし")
# 更新日時を記録
sheet.cell(row=row, column=timestamp_col, value=datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
# ファイルを保存
workbook.save(file_path)
print("エクセルファイルを更新しました。")
# 使用方法
file_path = "product_prices_yahoo.xlsx" # エクセルファイルの場所
update_excel(file_path)
6. IDLEを使用したスクリプトの実行方法
エクセルファイルとスクリプトが用意できたので、あとはこのスクリプトを保存し実行するのみです。このスクリプトを保存するにはテキストエディタを使用するのですが、本記事ではPythonをダウンロードするときに共にダウンロードされる「IDLE」を使用します。
IDLEを開く
Pythonをインストールすると「IDLE」というツールが一緒にインストールされます。Windowsの場合:スタートメニューから「IDLE」と検索して起動します。
Macの場合:Finderを開き、「アプリケーション」フォルダ内の「Python3.x」フォルダ(3.xはインストールしたPythonのバージョン)を探します。その中にある「IDLE.app」をクリックして起動します。
新しいスクリプトファイルを作成
IDLEの「File」メニューから「New File」を選択し、新しいウィンドウを開きます。
![](https://assets.st-note.com/img/1733811647-0mBHzQPKC5RwrgauM8SGOd1T.png?width=1200)
コードを貼り付ける
上記のコードをコピーして、新しいウィンドウに貼り付けます。ファイルを保存する
「File」→「Save As」でファイルを保存します。Pythonのスクリプトを保存する際、例えば import_product_prices.py という名前で保存します。ファイル名は拡張子が .py であれば自由に設定できます。ただし、スクリプトファイルとエクセルファイルは同じフォルダに保存してください。これが異なるフォルダにあると、プログラムがエクセルファイルを正しく読み込むことができず、正常に動作しなくなります。スクリプトを実行する
スクリプトを実行するにはいくつかの方法がありますが、最も簡単なやり方をご紹介します。先ほどのスクリプトを保存したウィンドウ上で、キーボードの「F5」を押します。(Macのキーボード設定によっては、F5キーを押す際に「fnキー」を同時に押す必要がある場合があります。)これだけでスクリプトが実行され、エクセルファイルが更新されます。この時エクセルファイルを一度閉じてから実行するようにしてください。エクセルファイルが閉じている状態でないとプログラムがエクセルファイルを読み込めないためです。価格情報がきちんと取得されているか確認
スクリプトが適切に実行されていれば商品価格と更新日時がエクセルファイルに自動的に取得されているはずです。一つ一つ手動で確認していたものがF5キーを一度押すだけでまとめて確認できるようになりました。きちんと動作することが確認出来たら、対象のURLを追加していき効率的に価格をチェックしていってください。
![](https://assets.st-note.com/img/1733817289-40HoD57TZQe8gKNdMxsrjqS6.png?width=1200)
7. 実用的アイデアと発展
商品情報の一元的管理: 本記事では価格情報を取得するためエクセルファイルを作成しましたが、このファイルは新たな列を挿入したり、「価格」と「URL」の列を入れ替えたり自由に改変することができます。プログラムはエクセルファイルに「商品名」「URL」「価格」「更新日時」の列ヘッダーさえあれば正常に作動します。これら列ヘッダーと名前が被らない新たな列「販売価格」を挿入し、仕入れ価格から販売価格を求める関数を作成して販売価格を求めるなどの使い方ができます。
完全自動化:本記事の通りにプログラムを実行していただくと、手動で価格をチェックすることと比べてかなりの効率化が実現しますが、Pythonのファイルを開き、F5キーを押すという作業は残ることとなります。そこでWindowsのタスクスケジューラやMacのcronなどを使用して、24時間ごとや1時間おきにというように定期的にプログラムを実行する仕組みを整えれば、これを完全に自動化することができます。
メール通知機能:本記事では商品価格を取得するスクリプトのみをご紹介しましたが、あらかじめ仕入れ価格に閾値を設定しておき、仕入れ価格が高騰してそれを超えた際にはメールやLINEで通知を送るという仕組みも構築することができます。今後の記事でこれらの実装方法もご紹介していければと思います。
まとめ
本日はPythonのウェブスクレイピングを使用し、Yahooショッピングの商品ページから商品価格情報を自動で取得する方法をご紹介しました!仕入れとして使用する商品ページをスクレイピングし、情報の取得を自動化することでかなりの作業効率化が実現するかと思います。今後の無在庫販売における在庫管理術としてぜひ活用してください!
いいなと思ったら応援しよう!
![カズ| 越境EC×効率化](https://assets.st-note.com/production/uploads/images/162687649/profile_43221fd6801ff1b1f16855217cd9a1ff.png?width=600&crop=1:1,smart)