本文へスキップ
BecomeCoder

Pythonスクレイピングコース · 第4章 データを抽出して整形する · レッスン13

CSVに書き出す

ブラウザで完結

導入

集めたデータは CSV(カンマ区切り)にすると、Excel や pandas でそのまま開けます。Python 標準の csv モジュールを使えば、区切りや引用符の扱いを安全に処理できます。

説明

手元の Python ではファイルに保存しますが、ここではブラウザなので、CSVの中身を文字列として組み立てて表示します(作り方はファイル保存と同じです)。

import csv
import io

products = [
    {"name": "りんご", "price": 120},
    {"name": "みかん", "price": 80},
]

buf = io.StringIO()                      # 文字列を貯める入れ物
writer = csv.DictWriter(buf, fieldnames=["name", "price"])
writer.writeheader()                     # 見出し行
writer.writerows(products)               # データ行をまとめて書く

print(buf.getvalue())
  • csv.DictWriter(..., fieldnames=[...]) … 辞書のリストを CSV にする書き込み役。列の順番を fieldnames で決めます。
  • writeheader() で見出し行、writerows(...) でデータ行を書きます。
  • 手元の Python では、io.StringIO() の代わりに open("out.csv", "w", newline="", encoding="utf-8") を渡せば、そのままファイルに保存されます。

実行結果:

name,price
りんご,120
みかん,80

やってみよう

products{"name": "ぶどう", "price": 300} を足すと、CSVの行も1行増えます。csv モジュールを使うと、値にカンマが含まれても自動で引用符("...")で囲んでくれるので、自前で文字列連結するより安全です。

演習

fieldnames["price", "name"] に変えると、列の順番が入れ替わります。実際に順番を変えて print し、見出しとデータの両方が入れ替わることを確かめてください。

ヒント1を見る

csv.DictWriter(buf, fieldnames=["price", "name"]) にするだけで、出力の列順が変わります。

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、本物の BeautifulSoup(Pyodide)でHTMLの解析をその場で試せます。初回だけ読み込みに少し時間がかかります。本文のHTMLを書き換えたり、抜き出すタグを変えたりして、結果の変化を確かめましょう(ネットからの取得は第5章の読み物で解説します)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。