見出し画像

【第7回】スクレイピングデータをCSVに保存し、Pandasで活用しよう

以下では、前回の記事(【第6回】超入門!Webスクレイピングに挑戦)に続いて、スクレイピングしたデータをCSVに保存し、Pandasを使って活用する方法を具体的に解説します。
初心者の方でも動かしながら理解できるよう、できるだけ噛み砕いて書いてみましたので、ぜひ参考にしてみてください!


【第7回】スクレイピングデータをCSVに保存し、Pandasで活用しよう

こんにちは!
前回は requests + BeautifulSoup を使ったWebスクレイピングの基礎を学びました。
ページのHTMLを解析して欲しい情報だけを抜き出せると、いろいろなサイトからデータを収集できて便利ですよね。

しかし、スクレイピングしたデータをただ出力するだけではもったいない!
今回は、「取得したデータをCSVファイルに保存 → Pandasで読み込んでみる」 という流れを体験してみましょう。

「CSVに保存すると何がいいの?」 「Pandasってデータ分析以外でも便利なの?」 「実際のコードが知りたい!」

こんな疑問を解消しつつ、具体的なサンプルを通して「スクレイピング + データ活用」の入り口を開いていきましょう。


▼ 目次

  1. なぜCSV保存が便利なのか?

  2. Pandasをインストールして準備する

  3. スクレイピングコードにCSV出力を追加しよう

  4. PandasでCSVを読み込み・表示してみる

  5. ちょっと応用:データを並べ替えたり集計してみる

  6. 次回予告:グラフ描画&可視化に挑戦!


1. なぜCSV保存が便利なのか?

1-1. CSVファイルとは?

  • CSV(Comma-Separated Values)は、文字通りカンマ区切りでデータを並べたテキストファイル。

  • ExcelやGoogleスプレッドシートなど、多くのソフトで手軽に読み込み・編集が可能です。

  • プログラムでも扱いやすいため、スクレイピングなどで取得したデータの保存先としてよく使われます。

1-2. CSVのメリット

  1. 汎用性が高い: ほぼすべての表計算ソフトやプログラミング言語で扱える。

  2. 軽量でシンプル: バイナリ形式ではなくテキスト形式なので、Gitなどで差分管理もしやすい。

  3. Pandasなどのツールと相性抜群: Pythonで表形式のデータを扱うときにスムーズ。


2. Pandasをインストールして準備する

2-1. 仮想環境をアクティブに

前回同様、プロジェクトフォルダで仮想環境をアクティベートしましょう。

cd /path/to/your/project
source venv_sample/bin/activate  # Mac/Linux
# Windowsなら:
.\venv_sample\Scripts\Activate.ps1

2-2. インストール

pip install pandas

これで Pandas が使えるようになります。
Pandasはデータ分析ライブラリとして有名ですが、CSVの読み書き、整形、集計などの機能が非常に充実しています。


3. スクレイピングコードにCSV出力を追加しよう

まずは前回のスクレイピング例を少し改造して、取得したデータをCSVファイルに保存してみましょう。
例として、「Scraping Club」のサイトから商品名と価格を抜き出すサンプルコードを用意しました。

import requests
from bs4 import BeautifulSoup
import csv

def scrape_and_save_csv():
    url = "https://scrapingclub.com/exercise/list_basic/?page=1"
    response = requests.get(url)
    if response.status_code != 200:
        print("エラーが発生しました:", response.status_code)
        return

    soup = BeautifulSoup(response.text, "html.parser")
    
    # 商品がまとめられている要素を取得
    cards = soup.find_all("div", class_="p-4")

    # CSVにまとめるためのリスト
    data_list = []

    for card in cards:
        # 商品名 (h4タグ)
        title_tag = card.find("h4")
        title = title_tag.text.strip() if title_tag else "No Title"

        # 価格 (h5タグ) ※サイトの構造によって適宜変更
        price_tag = card.find("h5")
        price = price_tag.text.strip() if price_tag else "No Price"

        data_list.append([title, price])

    # CSVファイルに書き込み
    with open("products.csv", mode="w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        # ヘッダー行
        writer.writerow(["Title", "Price"])
        # データ本体
        writer.writerows(data_list)

    print("CSVファイル『products.csv』にデータを保存しました。")

if __name__ == "__main__":
    scrape_and_save_csv()

コード解説

  1. import csv

    • Pythonの標準ライブラリcsvを使うと、CSVへの書き込みがラクになります。

  2. with open("products.csv", mode="w", ...) as f:

    • products.csv という名前で、書き込みモード(w)でファイルを開く。

  3. csv.writer(f) でCSVファイルへ書き込むための writer オブジェクトを作る。

  4. writer.writerow(["Title", "Price"]) でヘッダー行を書き込み。

  5. writer.writerows(data_list) で、複数の行を一括で書き込む。

    • data_list は [ [商品名1, 価格1], [商品名2, 価格2], ... ] という二次元リスト。

このスクリプトを実行すると、同じフォルダに products.csv が生成され、取得した商品名と価格が表形式で保存されます。


4. PandasでCSVを読み込み・表示してみる

では、次にPandasを使って、この products.csv を読み込んでみましょう。

import pandas as pd

def load_and_show_csv():
    df = pd.read_csv("products.csv", encoding="utf-8")
    print("CSVをDataFrameとして読み込みました!")
    print(df)

if __name__ == "__main__":
    load_and_show_csv()

コード解説

  • import pandas as pd : Pandasは pd の省略名で使うのが一般的。

  • pd.read_csv("products.csv", encoding="utf-8") : CSVを読み込んでDataFrameという表形式のデータ構造に変換。

  • print(df) : df を表示すると、エクセルやスプレッドシートのような行列データが出力されます。

このスクリプトを実行すると、ターミナル上にタイトルと価格の一覧がきれいに表示されるはず。
Pandasを使うと、CSVを「1行目→カラム名」「2行目以降→データ」として自動で解析し、扱いやすい形にしてくれます。


5. ちょっと応用:データを並べ替えたり集計してみる

5-1. 価格データを数値に変換

前の例では、価格が $24.99 のように文字列になっています。
数値計算したいときは、文字列→数値型への変換が必要です。

df["Price"] = df["Price"].str.replace("$", "").astype(float)
print(df)
  • str.replace("$", "") で $ を空文字に置き換え。

  • .astype(float) で文字列を浮動小数点数にキャスト。

5-2. 並べ替え(ソート)

df_sorted = df.sort_values(by="Price", ascending=False)
print("価格が高い順に並べ替え:")
print(df_sorted)
  • sort_values で並べ替えができる。by にカラム名を指定。

  • ascending=False で降順(大きい→小さい順)に。

5-3. 基本統計量

print("基本統計情報:")
print(df["Price"].describe())
  • describe() で、平均値や標準偏差、最小値・最大値などが一気に表示される。

初心者のうちは「とりあえず describe() をかけてみる」だけでも、データの概要が把握できるのでおすすめです。
余力があれば、先ほどのコードにこれらを追記して、dfの中身を編集したり、見てみたりしましょう!


6. 次回予告:グラフ描画&可視化に挑戦!

今回の記事では、

  1. スクレイピングしたデータをCSVに保存

  2. PandasでCSVを読み込み・表示し、並べ替えや統計を試す

といった流れを体験しました。
「ただデータを取得するだけ」で終わらず、表形式で整理して活用することで、さらに応用の幅が広がるはずです。

次回は、PandasやMatplotlibなどを使って、グラフ描画や可視化に挑戦してみましょう。
集めたデータを棒グラフや折れ線グラフにするだけで、新たな発見や見やすさが生まれます。
「プログラムでデータを扱う楽しさ」を、ぜひ一緒に味わっていきましょう!


まとめ

  1. CSV形式は軽量&汎用性が高いフォーマット:スクレイピングしたデータの保存先として便利

  2. Pandasを使うと、CSVを簡単に表(DataFrame)として扱える

  3. 数値変換→並べ替え→基本統計 など、少しのコードでデータ処理が可能

  4. 今回は価格データの例を挙げたが、いろんな数値データに応用できる

スクレイピングで収集したデータは、そのまま眺めても大変ですが、CSV保存→Pandasで整理すると扱いやすい状態に変わります。
このスキルを身につければ、「手作業でコピペする苦労」から一歩解放されるかもしれません。

ぜひ実際にコードを動かしてみて、

  • 「こんなサイトからデータを取ってみよう!」

  • 「取得したデータをExcelで開いてみよう!」

  • 「Pythonで軽く分析してみよう!」

といったステップに挑戦してみてください。

最後まで読んでいただき、ありがとうございました!
次回はグラフ描画&可視化に挑戦し、ビジュアル面からデータを楽しむ方法を学んでいきましょう。


編集後記

初心者の方は「スクレイピングも学んで、Pandasも使って…覚えることが多い!」と感じるかもしれません。
最初は「動くサンプルを写経(コピーして実行)」でもOKです。
動くものを手元で試して、少しずつ改変してみると「こういうふうにやればいいのか!」という実感が得られます。

Pandasは奥が深く、もっと覚えたい機能が山ほどありますが、まずはCSV読み書きと基本的な操作ができれば十分実用的です。
ぜひ次の記事も参考にして、Pythonでのデータ処理の楽しさに触れていきましょう!

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