【Python学習中】 スクレイピング実践 表のデータをcsvファイルに保存する方法1
スクレイピングした表のデータをcsvに保存する方法を説明していきます。
今回は、必要な情報の取得を行います。
◆目次◆
今回の スクレイピングのお題
「Yahoo! Japan 天気・災害」のトップページの検索窓で「東京」した結果の画面
「https://weather.yahoo.co.jp/weather/search/?p=東京」の
「市区町村の表」のtableタグの
「市区町村名」と「市区町村名のリンク」の情報を取得します。
なお、以下の記事で「市区町村の表」のtableタグの情報の取得方法は説明していますので、今回は詳細の説明は割愛します。
【Python学習中】 スクレイピング実践 Requestsモジュールとbeautifulsoup4モジュール1 - Kの備忘録(仮)
【Python学習中】 スクレイピング実践 Requestsモジュールとbeautifulsoup4モジュール2 - Kの備忘録(仮)
手順1
「https://weather.yahoo.co.jp/weather/search/?p=東京」の
市区町村の表のtableタグの情報を取得する
手順2
tableタグの情報から
「市区町村名」はtdタグのテキスト情報を、
「市区町村名のリンク」はaタグのherf情報を取得する。
手順3
リストに「市区町村名」と「市区町村名のリンク」を格納する。
実際のコード
from bs4 import BeautifulSoup import requests url = 'https://weather.yahoo.co.jp/weather/search/?p=東京' r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') # 市区町村の表のidは「#rsltmuni 」 # 変数city_tableに「id = #rsltmuni」のtabelタグを格納する # 変数city_cellsに「id = #rsltmuni」のtabelタグの中にある、すべてのtdタグを格納する(リスト型) city_table = soup.select_one('#rsltmuni table') city_cells = city_table.find_all('td') # 変数city_list に要素なし(空)のリストを格納する city_list = [] # 変数city_cellsに対してforを使って以下の処理を行う # 1. 変数city_nameにtdタグのテキスト情報を格納する # 2. 変数city_linkにaタグのherf情報を格納する # 3. 変数cityに1と2を辞書型でそれぞれ格納する # (辞書はのキーは、表の見出し名にする) 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)
ちなみに、 変数city_listの中身を一行ずつ出力すると、以下のようになります。
for i in city_list: print(i) # 出力結果 # {'市区町村名': '東京都新宿区', 'リンク': 'https://weather.yahoo.co.jp/weather/13/4410/13104.html'} # {'市区町村名': '東京都港区', 'リンク': 'https://weather.yahoo.co.jp/weather/13/4410/13103.html'} # ・ # ・ # ・ # {'市区町村名': '東京都江東区', 'リンク': 'https://weather.yahoo.co.jp/weather/13/4410/13108.html'} # {'市区町村名': '東京都練馬区', 'リンク': 'https://weather.yahoo.co.jp/weather/13/4410/13120.html'}
これで必要な情報を取得できました。
次回はこの情報を表形式にしてcsv保存します。