1000件の商品価格比較データを整理するとき...
こんなシチュエーションを想像してください:朝、上司から「PChome、Momo、Yahooショッピングで『ゲーミングノートPC』を含む商品名と価格をすべて抽出し、Excelレポートにまとめてくれ」と依頼されました。競合分析が目的です。
プログラミングができない場合、あなたは3つのウェブページを開き、「ゲーミングノートPC」を検索することから始めます。そしてマウスで最初のノートPC名を選択し、Ctrl+Cでコピー、Excelに切り替えてCtrl+Vで貼り付け。ページに戻り、価格を選択し、再びコピー&ペースト。 この退屈な作業を10回繰り返した時点で、人生に疑問を抱き始めます。500回目に到達する頃には日が暮れ、目がかすんで誤って別のセルに貼り付けてしまうかもしれません。
これが「ウェブスクレイパー(Web Scraper)」が必要な理由です。
ウェブスクレイパーは、あなたが飼う仮想のクモのようなものです。URLを与え、「ページ内のすべての赤い文字と$マークが付いた数字をかみ砕いて持ってきて」と指示できます。 たった3秒で10ページをクロールし、数千のデータを完璧に整列させることができます。
Pythonエコシステムでは、2つの有名なスクレイピングツールがあります:
- Requests:ウェブページのドアをノックし、HTMLソースコードをすべてダウンロードします。
- BeautifulSoup:乱雑なHTMLソースコードの中から、ルーペで特定のテキスト(商品名、価格など)を正確に見つけ出します。
スクレイピングの第一法則:ウェブページの「骨格(HTML)」を理解する
データを収集する前に、スクレイパーに「探すものがどのように見えるか」を教える必要があります。 任意のショッピングページを開き、商品名を右クリック -> 「検査(Inspect)」を選択してください。 画面の右側に大量のコードが表示されます。恐れる必要はありません。これがウェブページの骨格(HTML)です。
次のようなものが見つかるかもしれません:
<div class="product-item">
<h2 class="title">ASUS ROG ハイエンドゲーミングノートPC</h2>
<span class="price">$45,000</span>
</div>
これがあなたの宝の地図です!
Pythonスクレイパーに次のように指示します:「class="product-item"が付いたすべての大きな箱を見つけ、その中からclass="title"のテキストとclass="price"の数字を取り出してください。」
Vibe Prompt実戦:1秒でスクレイピングスクリプト生成
以前は、RequestsとBeautifulSoupを使ったスクレイピングスクリプトを書くために、英語の技術文書を繰り返し参照する必要がありました。タグ名を1文字間違えるだけでスクレイパーがクラッシュすることもありました。 今では、AIに宝の地図を説明するだけで済みます!
【Pythonスクレイピング自動化Prompt】 Pythonスクレイピングスクリプトが必要です。 ターゲットURL:
https://example-shop.com/laptops
requestsでページを取得し、BeautifulSoupで解析してください。 ページの構造は次のとおりです:
- 各商品は
<div class="product-item">で囲まれています。- 商品名は
<h2 class="title">内にあります。- 商品価格は
<span class="price">内にあります。これら2つのデータを抽出し、
pandasライブラリを使用してlaptops_price.csvというファイルに保存してください。 完全なTry-Catchエラーハンドリングと日本語のコメントを追加してください。ページがスクレイピングをブロックする場合(HTTP 403など)、requestsにブラウザのUser-Agentヘッダを追加してください。
AIが生成した神レベルのスクレイピングスクリプト:
import requests
from bs4 import BeautifulSoup
import pandas as pd
def scrape_laptops():
url = 'https://example-shop.com/laptops'
# 実際のGoogle Chromeブラウザを装い、サイトブロックを回避
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
try:
print("ウェブページデータの取得を開始...")
# 1. ページにアクセスしコンテンツをダウンロード
response = requests.get(url, headers=headers)
response.raise_for_status() # エラーチェック(404など)
# 2. ダウンロードした生HTMLをBeautifulSoupで整理
soup = BeautifulSoup(response.text, 'html.parser')
# 3. class="product-item"のすべてのコンテナを検索
items = soup.find_all('div', class_='product-item')
data_list = []
# 4. コンテナを開き、必要なデータを抽出
for item in items:
title_tag = item.find('h2', class_='title')
price_tag = item.find('span', class_='price')
# データが存在すればクリーンアップして保存
if title_tag and price_tag:
title = title_tag.text.strip()
price = price_tag.text.strip()
data_list.append({"商品名": title, "価格": price})
# 5. PandasでCSVレポートに変換
df = pd.DataFrame(data_list)
df.to_csv('laptops_price.csv', index=False, encoding='utf-8-sig')
print(f"✅ スクレイピング完了!{len(data_list)}件のデータをlaptops_price.csvに保存")
except Exception as e:
print(f"🚨 スクレイピング失敗:{e}")
# 関数実行
scrape_laptops()
スクレイピングの倫理と法的境界線(Robots.txt)
この強力なスキルを習得すると、「すごい!ループを使って競合会社のサイトから毎秒100回データを取得し、すべての機密データをスクレイピングしよう!」と考えたくなるかもしれません。
すぐにこの考えをやめてください! スクレイピング頻度が高すぎると、相手のサーバーが過負荷でダウンする可能性があります。法的には、これは**DDoS(サービス拒否攻撃)**とみなされ、刑事責任を問われる可能性があります!
スクレイピングを行う際は、次の非公式ルールに必ず従ってください:
- 迷惑行為を避ける:ループ内に
time.sleep(3)を追加し、各ページ取得後に3秒間休止させ、サーバーに負荷をかけないようにします。 - Robots.txtを遵守する:スクレイピング対象のURLに
/robots.txtを追加します(例:google.com/robots.txt)。これは掲示板のようなもので、サイト所有者が「スクレイピング歓迎」ページと「禁止」ページを指定しています。倫理的なVibe Coderとして、所有者のルールを守りましょう。
次の章では、取得した冷たいCSVデータを、上司が驚く**「カラフルな可視化チャート(Data Visualization)」**に瞬時に変換する方法を教えます!