【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を確認すると
以下のように表示される)
手順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') # --------------------ここまでは前回と同じ---------------------- # レジャー施設の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の備忘録(仮)