こんにちはますのです。
現在気象庁の公開しているxmlやjsonから地震情報を定期的に確認出来ないかと模索しています。
その際にPythonでBeautiful Soupを使ってスクレイピングをする方法があったので試行錯誤中です。
困ったこと:日本語に対して文字化けが発生
まずはスクレイピングした値を出力できるかだけを試そうとしましたが文字化けが発生。
#スクレイピング対象のURLから値を取得
res = requests.get('https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml')
#取得した値からBeautifulSoupオブジェクトを作成
soup = BeautifulSoup(res.txt, 'html.parser')
# title タグの文字列を全て取得する
title_text = soup.find_all('title')
print(title_text)
実行したところ文字列は取得出来ているようですが日本語部分が文字化けしている様子。
[<title>é«é »åº¦ï¼å°éç«å±±ï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>ç«å±±ã®ç¶æ³ã«é¢ãã解説æ
å ±</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éç°äºå ±ï¼å®æï¼</title>, <title>éæºã»é度ã«é¢ããæ
å ±</title>]
参考:【Python】Webスクレイピング入門(BeautifulSoup4編)
解決:res.txtをres.contentへ変更
詳しい原理は理解出来ておらず。
Webページのエンコーディング部分の処理で文字化けしている様子。
こんな感じに変更してみる。
#スクレイピング対象のURLから値を取得
res = requests.get('https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml')
#取得した値からBeautifulSoupオブジェクトを作成
soup = BeautifulSoup(res.content, 'html.parser')
# title タグの文字列を全て取得する
title_text = soup.find_all('title')
print(title_text)
実行したところ問題無くtitleタグが出力されました。
[<title>高頻度(地震火山)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>火山の状況に関する解説情報</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報(定時)</title>, <title>降灰予報( 定時)</title>, <title>震源・震度に関する情報</title>]
参考:RequestsとBeautiful Soupでのスクレイピング時に文字化けを減らす
チラ裏程度のメモですが、Pythonで今後何かしら作っていくこともあると思うので備忘録です。
実際にやりたいプログラムが完成したら改めて記事にします。
実際にやりたいプログラムが完成したら改めて記事にします。