質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

629閲覧

PythonでChrome操作して現在の天気を取得したい

hyugasatsuman5

総合スコア18

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2018/04/03 20:58

PythonでChrome操作して現在の天気を取得したい

seleniumを使って天気情報を取得したいのですがどうしてもうまくいきません

Chromeを起動

「天気 東京」と検索欄に入力して検索

検索結果の上部欄に現在の温度、降水確率、湿度、風速が表示される

現在表示されているページのhtmlを取得

取得したhtmlから温度、降水確率、湿度、風速の要素を取得、抽出し、出力

という感じでChrome経由で取得したいと思っています

python

1from selenium import webdriver 2import time 3 4chro = webdriver.Chrome() 5 6chro.get("https://www.google.co.jp/") 7 8time.sleep(1) 9elem_search_word = chro.find_element_by_class_name("gsfi") 10time.sleep(1) 11elem_search_word.send_keys("天気 東京") 12 13time.sleep(1) 14 15elem_search_kensaku = chro.find_element_by_class_name("lsb") 16time.sleep(1) 17elem_search_kensaku.click() 18 19print(chro.page_source) 20

と上記のプログラムを作成し、実行

Chromeを起動し、グーグルサイトで「天気 東京」と検索、htmlを抽出するというところまではできました

(略) style="display:inline;text-decoration:none;margin-left:-1px" data-url="/setprefs?fheit=1&amp;sig=0_shwiVnSy4G9K62oo8K2CVA-PYCA=&amp;prev=https://www.google.co.jp/search%3Fsource%3Dhp%26ei%3DZNzDWp6ODoew0gSPkZT4Dg%26q%3D%25E5%25A4%25A9%25E6%25B0%2597%2B%25E6%259D%25B1%25E4%25BA%25AC%26oq%3D%25E5%25A4%25A9%25E6%25B0%2597%2B%25E6%259D%25B1%25E4%25BA%25AC%26gs_l%3Dpsy-ab.13..0l8.2295.2334.0.4496.5.2.0.0.0.0.170.281.0j2.2.0....0...1c.1.64.psy-ab..3.2.281...0i131k1.0.wdTkbIwZtwA" role="button" jsaction="wob.t" data-ved="0ahUKEwiVpPLP8Z7aAhWFmJQKHf_PCmIQ-1sIJzAA"><span aria-label="°Fahrenheit">°F</span></a><span class="wob_t" style="display:none;margin-left:-1px" aria-label="°Fahrenheit" aria-disabled="true" role="button">°F</span></div></div></div><div class="vk_gy vk_sh wob-dtl" style="float:right;padding-left:5px;line-height:22px;padding-top:2px;min-width:43%"><div>降水確率: <span id="wob_pp">10%</span></div><div>湿度: <span id="wob_hm">52%</span></div><div>風速: <span><span class="wob_t" id="wob_ws">7 m/s</span><span class="wob_t" style="display:none" id="wob_tws">7 m/s</span></span></div><div style="height:23px;overflow:hidden;padding:15px 0 9px"><div class="ksb uE5Hoc ksbs" aria-disabled="true" id="wob_temp" role="button" tabindex="0" style="display:inline-block">温度</div><div class="ksb PXcN4c uE5Hoc" aria-disabled="false" id="wob_rain" role="button" tabindex="0" style="display:inline-block">降水確率</div><div class="ksb PXcN4c" aria-disabled="fal (略)

上下の部分は省略していますがhtmlは抽出できました

ただその次の、上記のhtmlに温度、降水確率、湿度、風速の要素が含まれていますがこれらの要素から抽出するということがなかなかうまくできません
どうしたら抽出できるんでしょうか

試したこと

reを使ってhtmlから抽出しようとしました

from selenium import webdriver import time chro = webdriver.Chrome() chro.get("https://www.google.co.jp/") time.sleep(1) elem_search_word = chro.find_element_by_class_name("gsfi") time.sleep(1) elem_search_word.send_keys("天気 東京") time.sleep(1) elem_search_kensaku = chro.find_element_by_class_name("lsb") time.sleep(1) elem_search_kensaku.click() tenki = chro.page_source pattern=r'([+-]?[0-9]*)' import re lists=re.findall(pattern,tenki) suji = lists[0] print(suji)

と下部にプログラムを追加しましたがなにも主力もされず、エラーも出ませんでした

そもそもhtmlが長すぎて絞りきれてないのが原因だと思うんですが
Beautifulsoupを使えば要素を抜き出して抽出できるとは思うんですがただ今回はどうしてもブラウザ経由で抽出したいです
どうしたら良いでしょうか

補足情報(FW/ツールのバージョンなど)

Windows8.1
Python3.6.3
Pycharm

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

すみません、自己解決しました

温度のところですが
htmlには

<span class="wob_t" id="wob_tm" style="display:inline">26</span>

と書いてありましたので
その中の

id="wob_tm"

の部分を抜き出して下記のように修正しました

from selenium import webdriver import time chro = webdriver.Chrome() chro.get("https://www.google.co.jp/") time.sleep(1) elem_search_word = chro.find_element_by_class_name("gsfi") time.sleep(1) elem_search_word.send_keys("天気 東京") time.sleep(1) elem_search_kensaku = chro.find_element_by_class_name("lsb") time.sleep(1) elem_search_kensaku.click() tenki = chro.find_element_by_id("wob_tm").text print(tenki)

出力結果

26

と表示できました

最初このようにやってみたのですが
何故かうまく行かなかったのでいろいろ回り道してたんですが再度挑戦してみましたら成功しました

ご迷惑おかけしました

投稿2018/04/03 23:54

hyugasatsuman5

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問