Kの備忘録(仮)

Python、VBA、Excelを中心に記事を投稿

【Python学習中】 スクレイピング実践 表のデータをcsvファイルに保存する方法3

今回は、「市区町村の表」の下にある「レジャー施設」の表をスクレイピングして
csvファイルに保存したいと思います。

◆目次◆

今回の スクレイピングのお題

Yahoo! Japan 天気・災害」のトップページの検索窓で「東京」を検索した
結果の画面「https://weather.yahoo.co.jp/weather/search/?p=東京」の
「レジャー施設」の表の「施設名」「所在地」「カテゴリ」の情報をcsvファイルに保存する。

表の列見出し(columns)の設定

データフレーム(DataFrame)は、以下の3つの要素でできています。
・列見出し(columns)
・行見出し(index)
・値(values)

今回は、pandasを使って、列見出し(columns)を設定します。
HTMLから表(table)を取得すると、thタブが列見出し(columns)、tdタグがに値(values)あたります。
よって、1つ目の要素を列見出し(columns)に、2つ目以降の要素を値(values)に設定します。

(後述の手順2のコード)

df = pd.DataFrame(leisur_table_list[1:])
df.columns = leisur_table_list[0]

手順1

https://weather.yahoo.co.jp/weather/search/?p=東京」の
「レジャー施設」の表のtableタグの情報を取得する

手順2

変数leisur_table_listにthタグとtrタグの情報を二次元リストで格納する。
変数leisur_table_listの1つ目の要素を列見出し(columns)に
2つ目以降の要素を値(values)に設定して、データフレーム型にはめる。
(Jupyter Notebookでデータフレーム型にはめた変数leisur_table_listを確認すると
 以下のように表示される)

f:id:lbibouroku:20210608215546p:plain

手順3

csvファイルに保存する。
(前回と同様に、保存したcsvファイルをExcelで開くと以下のように表示される)

f:id:lbibouroku:20210608215715p:plain

実際のコード

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')
# --------------------ここまでは前回と同じ---------------------- 

# レジャー施設のid = '#rsltleis' 
leisure_table = soup.select_one('#rsltleis table')
leisure_rows = leisure_table.select('tr')

# 変数leisur_table_list に空のリストを作成する
leisur_table_list = []

# thタグとtrタグの情報を二次元リストでテキストに変換して格納する
for tr in leisure_rows:    
    leisur_tr_list = []
    for row in tr.find_all(['th', 'td']):
        leisur_tr_list.append(row.text)
    leisur_table_list.append(leisur_tr_list)

# 手順2のコード
#  leisur_table_list[0] リストの1つ目の要素、列見出し(columns)にあたる
#  leisur_table_list[1:] リストの2つ目の要素、値(values)にあたる 
df = pd.DataFrame(leisur_table_list[1:])
df.columns = leisur_table_list[0]

# 手順3のコード
df.to_csv('leisur.csv' ,index = None, encoding='utf-8-sig')

これでスクレイピングした表の情報をcsvファイルに保存することができました。
次回は、保存したcsvファイルを、さらにJSON形式で保存したいと思います。

関連記事

【Python学習中】 スクレイピング実践 表のデータをcsvファイルに保存する方法1 - Kの備忘録(仮) 【Python学習中】 スクレイピング実践 表のデータをcsvファイルに保存する方法2 - Kの備忘録(仮)