re.findallの挙動がおかしいと書きましたが,具体的にはマッチしている文字列が一文字しかヒットしない現象が起きて困っています.
ソースコード
以下のコードは天気予報サイトから時刻,降水量,気温のデータを抜き出すことを目的としています.
Python
1import os 2import re 3import requests 4import urllib.request 5 6Weather_URL = 'https://weathernews.jp/onebox/35.7425784/139.7013585/' 7 8with urllib.request.urlopen(Weather_URL) as response: 9 html = response.read().decode() 10 seiki = r'<div class="weather-day__head">(.|\s)*?<div class="weather-day">' 11 reseiki = re.search(seiki, html).group() 12 print(reseiki) 13 14 time = re.findall(r'<p class="weather-day__time">(.|\s)*?</p>',reseiki) 15 rain = re.findall(r'<p class="weather-day__r">(.|\s)*?</p>',reseiki) 16 temp = re.findall(r'<p class="weather-day__t">(.|\s)*?</p>',reseiki) 17 18 print(time) 19 print(rain) 20 print(temp)
結果
print(reseiki)
print(reseiki)
1<p>Hour</p><p>Weather</p><p>Precip.</p><p>Temp.</p><p>Wind</p> 2 </div> 3 <div class="weather-day__body"> 4 <div class="weather-day__item"> 5 <p class="weather-day__time">17:00</p> 6 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/300.png"></p> 7 <p class="weather-day__r">1mm/h</p> 8 <p class="weather-day__t">81°F</p> 9 <p class="weather-day__w">3m/s<br>SSW</p> 10 </div> 11 <div class="weather-day__item"> 12 <p class="weather-day__time">18:00</p> 13 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/300.png"></p> 14 <p class="weather-day__r">1mm/h</p> 15 <p class="weather-day__t">81°F</p> 16 <p class="weather-day__w">3m/s<br>SSW</p> 17 </div> 18 <div class="weather-day__item"> 19 <p class="weather-day__time">19:00</p> 20 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/300.png"></p> 21 <p class="weather-day__r">1mm/h</p> 22 <p class="weather-day__t">81°F</p> 23 <p class="weather-day__w">3m/s<br>SSW</p> 24 </div> 25 <div class="weather-day__item"> 26 <p class="weather-day__time">20:00</p> 27 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/200.png"></p> 28 <p class="weather-day__r">0mm/h</p> 29 <p class="weather-day__t">81°F</p> 30 <p class="weather-day__w">2m/s<br>SSW</p> 31 </div> 32 <div class="weather-day__item"> 33 <p class="weather-day__time">21:00</p> 34 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/200.png"></p> 35 <p class="weather-day__r">0mm/h</p> 36 <p class="weather-day__t">79°F</p> 37 <p class="weather-day__w">2m/s<br>SSW</p> 38 </div> 39 <div class="weather-day__item"> 40 <p class="weather-day__time">22:00</p> 41 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/200.png"></p> 42 <p class="weather-day__r">0mm/h</p> 43 <p class="weather-day__t">79°F</p> 44 <p class="weather-day__w">2m/s<br>SSW</p> 45 </div> 46 <div class="weather-day__item"> 47 <p class="weather-day__time">23:00</p> 48 <p class="weather-day__icon"><img src="//smtgvs.cdn.weathernews.jp/onebox/img/wxicon/200.png"></p> 49 <p class="weather-day__r">0mm/h</p> 50 <p class="weather-day__t">79°F</p> 51 <p class="weather-day__w">2m/s<br>SSW</p> 52 </div> 53 </div> 54 </div> 55 <div class="weather-day"> 56
print(time)
print(rain)
print(temp)
print()
1['0', '0', '0', '0', '0', '0', '0'] 2['h', 'h', 'h', 'h', 'h', 'h', 'h'] 3['F', 'F', 'F', 'F', 'F', 'F', 'F']
と,print(reseiki)では正しく抽出範囲を絞れているのに,そこから正規表現で時刻,降水量,気温のデータが上手く抜き出せていない,というよりかは何故か最後の一文字しか抜き出せておりません.
試したこと
・time,rain,tempの方をtype()で調べてみたが普通にリスト型
・findallの返り値について調べなおしたが普通にlists(その中身もstr)が返り値だしおかしい...
誰かご教授願えないでしょうか?よろしくお願いします.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/27 08:42
2020/07/27 08:52 編集
退会済みユーザー
2020/07/27 09:13