指定したWebサイトから商品名・価格・URLを自動収集し、CSVファイルに整形して保存するPythonスクリプトです。定期実行との組み合わせで価格監視にも使えます。
import requests import pandas as pd from bs4 import BeautifulSoup from datetime import datetime import time def scrape_items(url: str) -> list[dict]: """指定URLから商品情報を取得してリストで返す""" headers = {'User-Agent': 'Mozilla/5.0'} res = requests.get(url, headers=headers, timeout=10) res.raise_for_status() soup = BeautifulSoup(res.text, 'html.parser') items = [] # 商品カードを全件取得(セレクタはサイトに合わせて変更) for card in soup.select('.product-card'): name = card.select_one('.product-name') price = card.select_one('.product-price') link = card.select_one('a') if not (name and price): continue items.append({ '商品名' : name.get_text(strip=True), '価格' : price.get_text(strip=True), 'URL' : link['href'] if link else '', '取得日時': datetime.now().strftime('%Y/%m/%d %H:%M') }) time.sleep(0.5) # サーバーへの負荷軽減 return items def save_to_csv(items: list[dict], filename: str): """データをCSVに保存""" df = pd.DataFrame(items) df.to_csv(filename, index=False, encoding='utf-8-sig') print(f"✅ {len(items)}件を {filename} に保存しました") if __name__ == '__main__': TARGET_URL = 'https://example.com/products' OUTPUT_CSV = f'products_{datetime.now().strftime("%Y%m%d")}.csv' data = scrape_items(TARGET_URL) save_to_csv(data, OUTPUT_CSV)