【Python学習中】 スクレイピング実践 Requestsモジュールとbeautifulsoup4モジュール2
今回は、前回取得した市区町村の表の情報をもとに
さらに必要な情報を抜き出していきたいと思います。
◆目次◆
今回の スクレイピングのお題
前回取得した「市区町村の表」のtableタグの中にある、
各市町村名の情報(テキスト部分のみ)を取得します。
表のHTML構造
表のHTML構造は以下の通りです。
・table: テーブル全体
-thead: 表のヘッダー
-tbody: 表の本体
-tfoot: 表のフッター
‣tr: 行
‣th: 見出しセル
‣td: セル
具体的な構造は以下の図を参照してください。
各市区町村名の部分をデベロッパーツールで確認すると
tdタグの中にあることが判明しました。
なので、各市区町村名の部分は「idが#rsltmuniであるtdタグ」を指定すれば取得できます。
今回は変数rsltmuni_tdに格納します。
rsltmuni_td = soup.select('#rsltmuni td')
tdタグのテキスト部分の抽出方法
さらに、tdタグの中の市区町村名のみを抜き出します。
「tag.text」の形で、指定したタグオブジェクト*1のテキスト部分のみ
抽出できます。
しかし、注意点があります。
「tag.text」が適用できるのは1つの要素のみです。
変数rsltmuni_tdはリスト型なので、以下のようなコードを書いてもエラーになります。
print(rsltmuni_td.text)
この場合は、forを使って、リストの中の1つ1つの要素に対して
テキスト部分の抽出を行う必要があります。
以下のように変数td_textに対して、テキストの抽出を行います。
for td_text in rsltmuni_td: print(td_text.text)
前回のコードを編集して、
各市町村名の情報(テキスト部分のみ)を取得します。
import requests from bs4 import BeautifulSoup url = 'https://weather.yahoo.co.jp/weather/search/?p=東京' r = requests.get(url) # 変数rに対して、通信とエンコードの種類の確認を行う # r.raise_for_status()は、通信が失敗したらエラーを返す(エラーになったら処理が中断される) r.raise_for_status() r.status_code r.encoding # 変数soupに変数rのHTMLドキュメントとHTML解析ツールを格納する soup = BeautifulSoup(r.text, 'html.parser') # 市区町村の表のidは「#rsltmuni 」なので # 変数rsltmuni_tdにselect()メソッドでidは「#rsltmuni 」のtdタグを指定する rsltmuni_td = soup.select('#rsltmuni td') # 通信結果を出力する print(f'通信結果:{r.status_code}') print(f'通信結果:{r.encoding}') print('各市区町村名:') # 変数rsltmuni_tdに対してforを使いながら # 変数td_textのテキスト部分を抽出し、出力する for td_text in rsltmuni_td: print(td_text.text) # 通信結果:200 # 通信結果:utf-8 # 各市区町村名: # 東京都新宿区 # 東京都港区 # 東京都千代田区 # 東京都世田谷区 # 東京都大田区 # 東京都中央区 # 東京都足立区 # 東京都八王子市 # 東京都江東区 # 東京都練馬区
これで市区町村名の情報が取得できました。
この続きは、もう少し学習をすすめてから公開したいと思います。
次回は、違うテーマ(スクレイピング関連かもしれませんが・・・)を取り上げます。
Python スクレイピングとは? 概要と注意点 - Kの備忘録(仮)
Python スクレイピングをするための準備 Requestsモジュール1 - Kの備忘録(仮)
Python スクレイピングをするための準備 Requestsモジュール2 - Kの備忘録(仮)
Python スクレイピングをするための準備 beautifulsoup4モジュール1 - Kの備忘録(仮)
Python スクレイピングをするための準備 デベロッパーツール - Kの備忘録(仮)
Python スクレイピングをするための準備 beautifulsoup4モジュール2 - Kの備忘録(仮)
【Python学習中】 スクレイピング実践 Requestsモジュールとbeautifulsoup4モジュール1 - Kの備忘録(仮)
*1:HTML要素