でも、どうやってやれば良いのか分からない。初心者でも分かりやすく教えて欲しい!
この記事では、上記のような悩みを解決していきます。
この記事の内容
- PythonでスクレイピングしたデータをCSVに保存する方法
この記事を書いている僕は、フリーランスのデータアナリスト。
普段からPythonを使っているので、こういった操作には慣れています。
今回はそんな僕が『PythonでスクレイピングしたデータをCSVに保存する方法』を紹介していきます。
スクレイピング結果のCSV出力は、非常によく使う知識です。
ぜひこの記事でおさえておきましょう。
なお、必要になるPythonライブラリは以下の通りです。
- csv : CSV出力で必要
- Requests : スクレイピングで必要
- Beautiful Soup : スクレイピングで必要
さっそく解説していきます。
Contents
PythonでスクレイピングしたデータをCSVに保存する方法【3STEPで解説】

今回はタレント辞書に載っている「20代の女優一覧」から、以下のデータをスクレイピングで取得したいと思います。
- 名前
- 職業(モデル、女優、タレント)
- 年齢
- 詳細ページのURL

スクレイピングしてからCSVに保存するまでの手順は、以下のとおりです。
- STEP① : スクレイピングで、データを抽出する(※いつもどおり)
- STEP② : ヘッダー部分を作成する
- STEP③ : 抽出したデータを、CSVに書き込む
順番に解説していきますね(`・ω・´)!
STEP① : スクレイピングで、データを抽出する(※いつもどおり)
結論、以下のコードでスクレイピングが可能です。
import requests
from bs4 import BeautifulSoup
url = 'https://talent-dictionary.com/s/jobs/3/20'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
actors = soup.find('ul', class_='list').find_all('li')
for actor in actors:
prof = actor.find('div', class_='right')
name = prof.find('a', class_='title').text
url = prof.find('a', class_='title').get('href')
occupation = prof.find('a', class_='job').text
age = prof.find('span', class_='age').text
print('****************')
print(name)
print(url)
print(occupation)
print(age)
print()
上記のコードをコピペして実行すると、以下のような出力になるはずです。

コードについては、PythonおよびBeautifulSoupの扱いに慣れていたら問題ないかなと。
※スクレイピング自体が怪しい場合には、ぜひ僕のYouTube動画を見てみてください!無料で学習できます!
STEP② : ヘッダー部分を作成する
スクレイピングで取得したデータを、そのままCSVに書き込むと、各列にどんなデータが格納されているのか分かりません。
人名や職業なら分かるかもしれないですが、数字だけ格納されている列に関しては、やはり説明がないと難解です。
そのため、スクレイピングで取得したデータをCSVに書き込むとき、ヘッダーを作成してあげましょう。
ヘッダー追加のコードとしては以下になります。
import requests
from bs4 import BeautifulSoup
HEADER = ['name', 'age', 'occupation', 'url'] # 追加部分
url = 'https://talent-dictionary.com/s/jobs/3/20'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
actors = soup.find('ul', class_='list').find_all('li')
for actor in actors:
prof = actor.find('div', class_='right')
name = prof.find('a', class_='title').text
url = prof.find('a', class_='title').get('href')
occupation = prof.find('a', class_='job').text
age = prof.find('span', class_='age').text
print('****************')
print(name)
print(url)
print(occupation)
print(age)
print()
STEP③ : 抽出したデータを、CSVに書き込む
最後にスクレイピングしたデータをCSVに書き込んでいきます。
先ほど準備したヘッダー情報を先に書き、その後スクレイピングしたデータをCSVに書き込む感じです。
つまり、以下のようにコードなります。
import csv
import requests
from bs4 import BeautifulSoup
HEADER = ['name', 'age', 'occupation', 'url']
url = 'https://talent-dictionary.com/s/jobs/3/20'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
actors = soup.find('ul', class_='list').find_all('li')
with open('actors.csv', 'w', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(HEADER)
for actor in actors:
prof = actor.find('div', class_='right'})
name = prof.find('a', class_='title').text
url = prof.find('a', class_='title').get('href')
occupation = prof.find('a', class_='job').text
age = prof.find('span', class_='age').text
row = [name, age, occupation, url]
writer.writerow(row)
やっていることを端的にまとめると、以下の流れになっています。
- ① with(ステートメント)を使って、CSVファイルを開く
- ② ファイル書き込みするために
writer = csv.writer(f)
でインスタンスを作成する - ③ forループ前でヘッダーだけ書き込んで、forループで中身を書き込んでいく
withステートメントで開くCSVファイルは、そのファイルが存在しなければ新しく作成されます。
なので、今回でいうとactors.csv
は最初から作成しておく必要がありません。
逆に、既存で存在するCSVファイルに書き込みする場合、中身が消えてしまいますのでご注意ください(`・ω・´)!
補足 : 作成したCSVファイルの中身を、Pythonで確認する
作成したCSVの中身を、Pythonを使って確認しておきましょう。
CSVの読み込みはPandas
を使ってデータフレームに変換してしまうのが手っ取り早いです。
import pandas as pd
df = pd.read_csv('actors.csv')
print(df)
上記のコードを書いてみましょう。
そうすると、以下のような出力結果になるかと思います。

しっかりとCSVファイルを作成できていますね(`・ω・´)!
まとめ : PythonでスクレイピングしたデータをCSVに保存する方法
というわけで、PythonでスクレイピングしたデータをCSVに保存する方法を紹介しました。
今回はcsv
という標準ライブラリを活用しましたが、正直同じことをするならPandas
を使ったほうがラクです。
データの操作をするとなったらPandas
は必須になるので、ぜひ今のうちから学習しておきましょう!
それでは、この辺で。