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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

Q&A

0回答

1116閲覧

AWS lambdaで気象庁のサイトの天気図のURL取得がうまくいかない

miyazy

総合スコア8

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

0グッド

3クリップ

投稿2021/05/18 10:39

編集2021/05/19 11:07

AWS lambdaで気象庁のサイトから天気図(24時間予想図、48時間予想図)のURLを取得しようとしています。
https://www.jma.go.jp/bosai/weather_mapに接続後
「▷」ボタンを押して表示される24時間予想図のURLを取得したいのですが、

ローカルでテストすると正しいアドレスが取得できるのですが、
AWS lambdaで実行すると違うアドレスが取得されてしまします。

当初はうまくいっていたのですが、なにかのタイミングでおかしなアドレスが取得されるようになってしましました。

解決方法についてご教授願います。

気象庁のサイトのjavascriptが実行環境によって異なった動きをするとかでしょうか?

python

1#気象庁天気図 24時間予想図、48時間予想図のURLを取得 2#https://www.jma.go.jp/bosai/weather_map 3 4import time 5import urllib.error 6import urllib.request 7 8from selenium import webdriver 9from bs4 import BeautifulSoup 10 11 12#webdriver_path = "/opt/python/bin/chromedriver" #AWS Lambda実行時 13webdriver_path = "c:/chromedriver/chromedriver" #ローカル実行時 14 15# webdriber.chrome option 設定 16options = webdriver.ChromeOptions() 17options.add_argument("--headless") 18options.add_argument("--disable-gpu") 19options.add_argument("--window-size=1704x1078") 20options.add_argument("--disable-application-cache") 21options.add_argument("--disable-infobars") 22options.add_argument("--no-sandbox") 23options.add_argument("--hide-scrollbars") 24options.add_argument("--enable-logging") 25options.add_argument("--log-level=0") 26options.add_argument("--single-process") 27options.add_argument("--ignore-certificate-errors") 28options.add_argument("--homedir=/tmp") 29#options.binary_location = "/opt/python/bin/headless-chromium" #AWS Lambda実行時 30 31 32 33def lambda_handler(event, context): 34 35 #========= 24時間予想図、48時間予想図のURLを取得してを保存 ============= 36 37 print() 38 print("========= 24時間予想図、48時間予想図 =========") 39 40 driver = webdriver.Chrome(webdriver_path, chrome_options=options) 41 42 url = "https://www.jma.go.jp/bosai/weather_map" 43 driver.get(url) 44 title = driver.title 45 46 print("URL: "+url +" --- title: "+ title) 47 48 time.sleep(3) 49 50 #24時間予想図 51 # 「⇒」ボタンをクリックする 52 driver.find_element_by_xpath("//img[@src='../common/image/slider_skip_forward_y.svg']").click() 53 54 # 天気図のアドレスを取得して表示 55 soup = BeautifulSoup(driver.page_source, "html5lib") 56 image_td24 = soup.find('td', class_='weather-map-viewarea') 57 adress24 = "https://www.jma.go.jp/bosai/weather_map/" + image_td24.find("img")["src"] 58 print("24時間予想図---> "+adress24) 59 60 time.sleep(3) 61 62 #48時間予想図 63 # 「⇒」ボタンをクリックする 64 driver.find_element_by_xpath("//img[@src='../common/image/slider_skip_forward_y.svg']").click() 65 66 # 天気図のアドレスを取得して表示 67 soup2 = BeautifulSoup(driver.page_source, "html5lib") 68 image_td48 = soup2.find('td', class_='weather-map-viewarea') 69 adress48 = "https://www.jma.go.jp/bosai/weather_map/" + image_td48.find("img")["src"] 70 print("48時間予想図---> "+adress48) 71 72 73print(lambda_handler(0,0)) #ローカル実行時 74 75

ローカル上で次の環境で実行

24時間予想図---> https://www.jma.go.jp/bosai/weather_map/data/png/20210517053001_0_Z__C_010000_20210517000000_MET_CHT_JCIfsas24_Rjp_JCP600x581_JRcolor_Tjmahp_image.png
「令和3年5月18日9時の予想 24時間予想図」

48時間予想図---> https://www.jma.go.jp/bosai/weather_map/data/png/20210517065930_0_Z__C_010000_20210517000000_MET_CHT_JCIfsas48_Rjp_JCP600x581_JRcolor_Tjmahp_image.png
「令和3年5月19日9時の予想 48時間予想図」


AWS Lambda上で次の環境で実行
headless chrome=64.0.3282.167
chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Linux 4.14.225-175.364.amzn2.x86_64 x86_64)

<結果> 取得アドレスがおかしい

24時間予想図---> https://www.jma.go.jp/bosai/weather_map/data/png/20210516021231_0_Z__C_010000_20210516000000_MET_CHT_JCIspas_JCP600x581_JRcolor_Tjmahp_image.png
「令和3年5月16日9時」

48時間予想図---> https://www.jma.go.jp/bosai/weather_map/data/png/20210516021231_0_Z__C_010000_20210516000000_MET_CHT_JCIspas_JCP600x581_JRcolor_Tjmahp_image.png
「令和3年5月16日9時」


AWS Lambda上で次の環境で実行
headless chrome=67.0.3396.99
chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.14.225-175.364.amzn2.x86_64 x86_64

<結果> 以下のようなエラーが発生
{
"errorMessage": "Message: no such element: Unable to locate element: {"method":"xpath","selector":"//img[@src='../common/image/slider_skip_forward_y.svg']"}\n
(Session info: headless chrome=67.0.3396.99)\n (Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.14.225-175.364.amzn2.x86_64 x86_64)\n",
"errorType": "NoSuchElementException",
"stackTrace": [
" File "/var/task/lambda_function.py", line 52, in lambda_handler\n
driver.find_element_by_xpath("//img[@src='../common/image/slider_skip_forward_y.svg']").click()\n",
" File "/opt/python/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath\n
return self.find_element(by=By.XPATH, value=xpath)\n",

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問