【Python学習中】 スクレイピング実践 表のデータをcsvファイルに保存する方法2
引き続きスクレイピングした表のデータをcsvに保存する方法を説明していきます。
今回は、前回取得した「市区町村名」と「市区町村名のリンク」を
表の形にしてcsvファイルに格納します。
◆目次◆
pandasについて
pandasとは、データ分析の手助けをしてくれる外部ライブラリです。
pandasには非常に多くの機能があり、
説明しきれないため、今回は詳細の説明は割愛します。
今回行いたい「リスト型や辞書型のデータを、表の形にしてcsvファイルに格納する」
に必要な部分のみ紹介します。
(また別の機会にpandasモジュールは記事にしたいと思います)
なお、pandasモジュールはサードパーティ製のライブラリのため
Anacondaに含まれていません。
初めてpandasモジュールを使用するときは
以下のページの「外部ライブラリのモジュールのインストール方法」を
参考にして、モジュールをインストールしてください。
Python スクレイピングをするための準備 Requestsモジュール1 - Kの備忘録(仮)
・df = pd.DataFrame(list)
リスト型や辞書型のデータをデータフレームワーク型にはめる
今回の内容に編集すると、以下のコードになる
(後述の手順2のコード)
df = pd.DataFrame(city_list)
・df.to_csv('aaa.csv')
csvファイル名を指定
・index = None
データフレームの1列目に表示されるインデックスを削除
・encoding='utf-8-sig
エンコードの種類をUTF-8(BOMあり)に指定
※BOM とは、 Byte Order Mark の略です。
「これは Unicode で書かれたファイルデータである」ということを
明示しています。
BOMなし(encoding='utf-8')だと、エクセルで開いたときに文字化けする場合があります。
この3つを今回の内容に編集すると、以下のコードになる
(後述の手順3のコード)
df.to_csv('city.csv', index = None, encoding='utf-8-sig')
今回の スクレイピングのお題
「Yahoo! Japan 天気・災害」のトップページの検索窓で「東京」した結果の画面
「https://weather.yahoo.co.jp/weather/search/?p=東京」の
「市区町村名」と「市区町村名のリンク」の情報をcsvファイルに保存する。
手順1(前回の記事の部分)
「https://weather.yahoo.co.jp/weather/search/?p=東京」の
市区町村の表のtableタグの情報を取得し
変数city_listに「市区町村名」と「市区町村名のリンク」を格納する。
※前回の記事のリンクは、末尾の関連記事にあります。
手順2
変数city_listをデータフレーム型にはめる。
(Jupyter Notebookでデータフレーム型にはめた変数city_listを確認すると
以下のように表示される)
手順3
csvファイルに保存する。
(保存したcsvファイルをExcelで開くと以下のように表示される)
実際のコード
from bs4 import BeautifulSoup import requests # pandasモジュールをインポートする import pandas as pd url = 'https://weather.yahoo.co.jp/weather/search/?p=東京' r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') city_table = soup.select_one('#rsltmuni table') city_cells = city_table.find_all('td') # 変数d_listに空のリストを作成する city_list = [] # 各行に対して市区町村名とリンクを取得する for city_cell in city_cells: city_name = city_cell.text city_link = city_cell.find('a').get('href') city = { '市区町村名': city_name, 'リンク': city_link, } city_list.append(city) # ---------ここまでpandasモジュール以外は前回と同じ----------- # 手順2のコード df = pd.DataFrame(city_list) # 手順3のコード df.to_csv('city.csv' ,index = None, encoding='utf-8-sig')
これでスクレイピングした表の情報をcsvファイルに保存することができました。
次回は、他の表をcsvファイルに保存をしたいと思います。