requests を事前にインストールする。
pip install requests
Webサイトにアクセスするためのresponseオブジェクトを返す。他にpost(URL)もある。
どちらも辞書を引数paramsに渡し、パラメータを指定可能。
text | 取得した文字列 |
status_code | ステータスコード |
url | アクセスしたURL |
encoding | 文字コード。'utf-8'などを指定。 |
content | 画像などバイナリデータ。 |
json() | JSONに変換して取得 |
テキストを取得、表示
import requests url = 'http://www.dicre.com/python/time.cgi' r = requests.get(url) r.encoding = 'utf-8' # 文字コード設定 print(r.text) # テキスト
画像ダウンロード
import requests url = 'http://www.dicre.com/python/cat.jpg' r = requests.get(url) f = open("cat.jpg","wb") f.write(r.content) f.close()
JSONダウンロード例
http://www.dicre.com/python/time.cgi
import requests url = 'http://www.dicre.com/python/time.cgi' r = requests.get(url) print(r.text) # テキスト
JavaScript Object Notation。JavaScriptの表記を元にしたオブジェクト表記法。
オブジェクトの例。Pythonの辞書とほぼ同じ。
{"name":"田中","age":30}
配列の例。Pythonのリストとほぼ同じ。
[10,20,30]
オブジェクト配列の例
[ {"name":"田中","age":30}, {"name":"鈴木","age":30}, {"name":"山本","age":30} ]
JSON文字列をjson()メソッドで変換し、オブジェクトは辞書、配列はリストとして処理が出来る。
例:以下のJSONデータが変数resに入っていた時
{ 'date': "2020-08-26", 'time': "12:32:50" }
import requests url = 'http://www.dicre.com/python/time.cgi' r = requests.get(url) res = r.json() print(res["date"]) print(res["time"])
http://www.dicre.com/python/nibai.php?num=5
URLの後に付ける ?num=5 のようなパラメータは辞書としてgetオプションのparams引数で渡すことができる。
import requests url = 'http://www.dicre.com/python/nibai.php' params = {'num':5} r = requests.get(url,params = params) print("URL=",r.url) # URL print(r.text) # テキスト
さまざまなサイトがAPIの提供を行っている
Web API:アクセスするとJSONでデータを返す
ランダムに猫の画像を返す
import requests url = 'https://aws.random.cat/meow' res = requests.get(url).json() url = res['file'] print(url)
※気象庁の非公開API
URL:
https://www.jma.go.jp/bosai/forecast/data/forecast/地域コード.json
※地域コード
http://www.jma.go.jp/bosai/common/const/area.json
import requests url = "https://www.jma.go.jp/bosai/forecast/data/forecast/430000.json" res = requests.get(url).json()
times = res[0]['timeSeries'][0]['timeDefines'] areas = res[0]['timeSeries'][0]['areas'] for area in res[0]['timeSeries'][0]['areas']: print(area['area']['name']) for i in range(3): print(times[i], area['weathers'][i])
※気象庁の非公開API
URL:
https://www.jma.go.jp/bosai/amedas/data/map/年月日時分00.json
年月日時分は YYYYMMDDhhmm 形式
※観測所番号
https://www.jma.go.jp/bosai/amedas/const/amedastable.json
from datetime import datetime now = datetime.now().strftime('%Y%m%d%H') url = "https://www.jma.go.jp/bosai/amedas/data/map/" + now + "0000.json" res = requests.get(url).json()
print(res['86141']['temp'])
import requests url = 'https://rss.applemarketingtools.com/api/v2/jp/music/most-played/10/songs.json' res = requests.get(url).json() results = res['feed']['results'] songs = [] for result in results: title = result['name'] artist = result['artistName'] print(title,artist)
Twitter、Instagram、Amazon、楽天市場などが登録必要なWebAPIを提供している。