Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Yahoo天気をスクレイピングしてみた(Python編)

はじめに

自分用のメモに近いですがせっかくやってみたので記事にしてみました。
元々ラズパイサイネージをやるために色々調べたのですが、
なかなかピンポイントで欲しい情報がなく結局スクレイピングやり方だけ調べて自力でなんとかしました。
(Python使いでもweb界隈の人でもないので一瞬苦戦しました...)
yahooだと天気のapiがありますが使わなかったのは降水量しかわからないためです。

C#編は
https://qiita.com/MonoShobel/items/3ae0c051d2aadba698a4
あります。

参考にしたもの

Pythonでのスクレイピングに当たり下記の記事を参考にしました。
pythonでスクレイピングして天気予報をGoogleHomeにしゃべらせる
Python Webスクレイピング 実践入門

スクレイピング自体に関する良い悪い説明もあるので読んでおいたほうがいいと思います。

ちなみにYahoo天気ですが、たぶんスクレイピングは禁止されていません。
Yahooファイナンスは明確に禁止されていましたが、天気に関しては禁止しているような記述は見つかりませんでした。
ただ節度は守りましょう。定期的にスクレイピングするとしても天気は1時間または30分ごとくらいのアクセスで十分だと思います。

やること

色々取りたい情報はありますがとりあえず東京の今日の天気を取得しました。
下記の画像の今日と明日の天気を取得します。
天気.png

コード

実際にコードを実行すれば今日と明日の東京の天気を取得できます。(Visual Codeで色々書いたりデバックしました。)
だいたいコメントに何をやっているか書いてあります。
ほぼコピペのソースですが注目ポイントはselect_oneでtextの部分を取得しているところです。
Google Chromeで自動で取得しようとしたのですがうまくいかなかったので手打ちで探っていったところうまくいきました。

tenki.py
import urllib3
from bs4 import BeautifulSoup

#アクセスするURL
url = 'https://weather.yahoo.co.jp/weather/jp/13/4410.html'

#URLにアクセスする 戻り値にはアクセスした結果やHTMLなどが入ったinstanceが帰ってきます
http = urllib3.PoolManager()
instance = http.request('GET', url)
#instanceからHTMLを取り出して、BeautifulSoupで扱えるようにパースします
soup = BeautifulSoup(instance.data, 'html.parser')

#CSSセレクターで天気のテキストを取得します。
#今日の天気
tenki_today = soup.select_one('#main > div.forecastCity > table > tr > td > div > p.pict')
print ("今日の天気は"+tenki_today.text)

#明日の天気
tenki_tomorrow = soup.select_one('#main > div.forecastCity > table > tr > td + td > div > p.pict')
print ("明日の天気は"+tenki_tomorrow.text)

#一瞬で画面が消えないよう入力されるまで待機
input()

以下、実行結果
実行画面.png

終わりに

このコードを元に色々できると思います。
定期的に取得するなどはこの記事に加筆するかラズパイサイネージの記事に書くと思います。
あと環境の問題で実行できなかった等あると思うのでそのあたりは後々加筆します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away