Kの備忘録(仮)

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

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

今回は、今まで解説してきた
Requestsモジュールとbeautifulsoup4モジュールを使って
実際にスクレイピングをしていきます。

◆目次◆

スクレイピングのお題

Yahoo! Japan 天気・災害」のトップページの検索窓で「東京」した結果の画面
https://weather.yahoo.co.jp/weather/search/?p=東京」
「市区町村の表」のtableタグの情報を取得します。

手順1

https://weather.yahoo.co.jp/weather/search/?p=東京」の
市区町村の表の情報をデベロッパーツールで取得する
→取得結果は以下の通りでした。
 「#rsltmuni > div.serch-table > table > thead > tr > th > b」

 この結果から、市区町村の表のidは「#rsltmuni 」であることが判明しました。

手順2

RequestsモジュールでHTTP通信を行い、以下を行う
・サイトの情報を取得する(変数rに「requestsオブジェクト」を格納する)
・通信ができるか確認する
エンコードの種類は何か確認する(UTF-8以外の場合、文字化けすることがある)
(手順2のコードの記述は、「実際のコード」を参照してください)

手順3

beautifulsoup4モジュールでHTML解析を行い、以下を行う
・取得した情報をHTML解析する
・取得する情報に「idが#rsltmuniであるtableタグ」を指定する
(手順3のコードの記述は、「実際のコード」を参照してください)

実際のコード

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_tableにselect()メソッドでidは「#rsltmuni 」のtableタグを指定する
rsltmuni_table = soup.select('#rsltmuni table')

# 各結果を出力する
print(f'通信結果:{r.status_code}')
print(f'通信結果:{r.encoding}')
print(f'市区町村の表のHTML情報の取得結果:\n{rsltmuni_table}')

# 出力結果
# 通信結果:200
# 通信結果:utf-8
# 市区町村の表のHTML情報の取得結果:
# [<table border="1" cellpadding="3" cellspacing="0" class="yjw_table3" width="100%">
# ・
# ・
# ・
# </table>]

これで市区町村の表がHTML情報で取得できました。


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


Python スクレイピングとは? 概要と注意点 - Kの備忘録(仮)
Python スクレイピングをするための準備 Requestsモジュール1 - Kの備忘録(仮)
Python スクレイピングをするための準備 Requestsモジュール2 - Kの備忘録(仮)
Python スクレイピングをするための準備 beautifulsoup4モジュール1 - Kの備忘録(仮)
Python スクレイピングをするための準備 デベロッパーツール - Kの備忘録(仮)
Python スクレイピングをするための準備 beautifulsoup4モジュール2 - Kの備忘録(仮)