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

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

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

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

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

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

Q&A

解決済

1回答

1599閲覧

python スクレイピング json.loads() JSONDecodeError

PPAP_AWS

総合スコア105

スクレイピング

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

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

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

0グッド

0クリップ

投稿2020/10/28 09:27

編集2020/10/28 09:36

以下のコードを実行したのですが、エラーが出てしまいます。
ご指摘、ご教授お願いします。
誤解で、通っていたと勘違いしてしまい。解決しまったのですが、エラーとなっていたため再度質問の途中から記載させていただきております。
よろしくお願い致します。
始まり
![終わり(ffbbf2b4299e69dfd776a2fd48221a05.png)

エラー内容。

python

1for name in cities: 2 print("London,UK", "Tokyo,JP", "New York,US") 3 4 url = api.format(city=name, key=apikey) 5 r = requests.get(url) 6 data = json.loads(r.text) 7 print(json.dumps(data, indent=1)) 8 9 print("+ 都市 =", data["name"]) 10 print("| 天気 =", data["weather"][0]["description"]) 11 print("| 最低気温 =", k2c(data["main"]["temp_min"])) 12 print("| 最高気温 =", k2c(data["main"]["temp_max"])) 13 print("| 湿度 =", data["main"]["humidity"]) 14 print("| 気圧 =", data["main"]["pressure"]) 15 print("| 風速度 =", data["wind"]["speed"]) 16 print("") 1718KeyError Traceback (most recent call last) 19<ipython-input-212-c7e14fb73807> in <module> 20 7 print(json.dumps(data, indent=1)) 21 8 22----> 9 print("+ 都市 =", data["name"]) 23 10 print("| 天気 =", data["weather"][0]["description"]) 24 11 print("| 最低気温 =", k2c(data["main"]["temp_min"])) 25 26KeyError: 'name'

print("+ 都市 =", data["name"])無し。

python

1for name in cities: 2 print("London,UK", "Tokyo,JP", "New York,US") 3 4 url = api.format(city=name, key=apikey) 5 r = requests.get(url) 6 data = json.loads(r.text) 7 print(json.dumps(data, indent=1)) 8 9 10 print("| 天気 =", data["weather"][0]["description"]) 11 print("| 最低気温 =", k2c(data["main"]["temp_min"])) 12 print("| 最高気温 =", k2c(data["main"]["temp_max"])) 13 print("| 湿度 =", data["main"]["humidity"]) 14 print("| 気圧 =", data["main"]["pressure"]) 15 print("| 風速度 =", data["wind"]["speed"]) 16 print("") 1718--------------------------------------------------------------------------- 19KeyError Traceback (most recent call last) 20<ipython-input-213-0229e683493e> in <module> 21 8 22 9 23---> 10 print("| 天気 =", data["weather"][0]["description"]) 24 11 print("| 最低気温 =", k2c(data["main"]["temp_min"])) 25 12 print("| 最高気温 =", k2c(data["main"]["temp_max"])) 26 27KeyError: 'weather'

python

1import requests 2import json 34apikey = "MMM" 56cities = ["London,UK", "Tokyo,JP", "New York,US"] 78api = "http://api.openweathermap.org/data/2.5/forecast?q={city}&APPID={key}" 910k2c =lambda k: k - 273.15 1112for name in cities: 13 print("London,UK", "Tokyo,JP", "New York,US") 1415for name in cities: 16 print("London,UK", "Tokyo,JP", "New York,US")

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

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

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

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

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

guest

回答1

0

ベストアンサー

実際に自分でopenweatherのアカウントをつくってログインして調べて見ました。

元の"http://api.openweathermap.org/data/2.5/forecast?q={city}&APPID={key}"
だと、データ構造が異なるため、うまく表示できません。

api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"

のように「forecast」を「weather」に直して実行してみてください。

( print(json.dumps(data, indent=1)の行は、デバッグのために追加したものなので、
削除してかまいません)

全文:

import requests import json apikey = "MMM" cities = ["London,UK", "Tokyo,JP", "New York,US"] api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}" k2c =lambda k: k - 273.15 for name in cities: print("London,UK", "Tokyo,JP", "New York,US") url = api.format(city=name, key=apikey) r = requests.get(url) data = json.loads(r.text) print("+ 都市 =", data["name"]) print("| 天気 =", data["weather"][0]["description"]) print("| 最低気温 =", k2c(data["main"]["temp_min"])) print("| 最高気温 =", k2c(data["main"]["temp_max"])) print("| 湿度 =", data["main"]["humidity"]) print("| 気圧 =", data["main"]["pressure"]) print("| 風速度 =", data["wind"]["speed"]) print("")

投稿2020/10/28 09:50

編集2020/10/28 09:53
sfdust

総合スコア1137

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

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

PPAP_AWS

2020/10/28 09:58

無事に通すことができました。 ご丁寧なご説明を何度もしていただきまして、誠にありがとうございます。 また、無茶な御要望に添っていただきまして、ありがとうございます。 今後ともよろしくお願い致します。 この度は、とても参考になるご回答いただきまして、ありがとうございます!
sfdust

2020/10/28 09:59

解決してよかったです。
PPAP_AWS

2020/10/29 07:50

参考資料の提供。 ありがとうございます! 今後に参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問