Kの備忘録(仮)

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

【Python学習中】 スクレイピング実践 Requestsモジュールとbeautifulsoup4モジュール2

今回は、前回取得した市区町村の表の情報をもとに
さらに必要な情報を抜き出していきたいと思います。

◆目次◆

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

前回取得した「市区町村の表」のtableタグの中にある、 各市町村名の情報(テキスト部分のみ)を取得します。

表のHTML構造

表のHTML構造は以下の通りです。
・table: テーブル全体
 -thead: 表のヘッダー
 -tbody: 表の本体
 -tfoot: 表のフッター
  ‣tr: 行
  ‣th: 見出しセル
  ‣td: セル

具体的な構造は以下の図を参照してください。

f:id:lbibouroku:20210601214315p:plain

各市区町村名の部分をデベロッパーツールで確認すると 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要素