サイトデザイン変更中につき、読みづらい部分があります。ご容赦くださいませ。

PythonでスクレイピングしたデータをCSVに保存する方法【3STEPで解説】

[chat face=”komatta_man2.png” name=”スクレイピング学習中の人” align=”left” border=”gray” bg=”none”]Pythonでスクレイピングした結果を、CSVに出力して保存したいな…。
でも、どうやってやれば良いのか分からない。初心者でも分かりやすく教えて欲しい![/chat]

この記事では、上記のような悩みを解決していきます。

[jin_icon_check color=”#0071BB” size=”20px”] この記事の内容

  • PythonでスクレイピングしたデータをCSVに保存する方法

この記事を書いている僕は、フリーランスのデータアナリスト。
普段からPythonを使っているので、こういった操作には慣れています。

今回はそんな僕が『PythonでスクレイピングしたデータをCSVに保存する方法』を紹介していきます。

スクレイピング結果のCSV出力は、非常によく使う知識です。
ぜひこの記事でおさえておきましょう。

なお、必要になるPythonライブラリは以下の通りです。

  • csv : CSV出力で必要
  • Requests : スクレイピングで必要
  • Beautiful Soup : スクレイピングで必要

さっそく解説していきます。

目次

PythonでスクレイピングしたデータをCSVに保存する方法【3STEPで解説】

Python スクレイピング CSV

今回はタレント辞書に載っている「20代の女優一覧」から、以下のデータをスクレイピングで取得したいと思います。

  • 名前
  • 職業(モデル、女優、タレント)
  • 年齢
  • 詳細ページのURL

Python スクレイピング CSV

»参考 : 女優 20代 一覧 – タレント辞書

スクレイピングしてから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 スクレイピング CSV

コードについては、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)

上記のコードを書いてみましょう。
そうすると、以下のような出力結果になるかと思います。

Python スクレイピング CSV

しっかりとCSVファイルを作成できていますね(`・ω・´)!

まとめ : PythonでスクレイピングしたデータをCSVに保存する方法

というわけで、PythonでスクレイピングしたデータをCSVに保存する方法を紹介しました。

今回はcsvという標準ライブラリを活用しましたが、正直同じことをするならPandasを使ったほうがラクです。

データの操作をするとなったらPandasは必須になるので、ぜひ今のうちから学習しておきましょう!

それでは、この辺で。

よかったらシェアしてね!

この記事を書いた人

たくさんPythonを紹介するYouTuberです(登録者1.94万人) | フリーランスで機械学習/分析案件も請けています(経験業界 : 金融, 情報通信, サービス) | 元プログラミングスクール講師

コメント

コメントする

目次
閉じる