PythonでAWSのIPアドレスの範囲を取得し、CSVで出力する
目的については別途書きますが、AWSで公開されているJSON形式のIPアドレスの範囲を取得し、CSVファイルとして出力します。
やるべきこととしては、
(1) AWSのWebサイト(※1)をスクレイピングし、データを取得。
(2)取得したJSON形式のデータをcsv形式で書き込み、保存。
一旦そんなところですね。
1.AWSのWebサイトをスクレイピングし、データを取得
スクレイピングにはPython標準ライブラリのurllibを使用します。その他jsonとcsvを扱うためのライブラリも用意します。
#ライブラリのインポート
import urllib
import json
import csv#url(※1)にアクセスし、データ取得
html = urllib.urlopen("https://ip-ranges.amazonaws.com/ip-ranges.json")
responseJson = json.loads(html.read())
2.取得したデータをcsv形式で書き込み、保存
json形式は辞書型ライクに扱えますので、keyでヘッダーを取得し、valueで値を取得します。
head = responseJson.get("prefixes")[0].keys()
#ファイルオープン
with open('ip_prefix.csv', 'w') as file:
ff = csv.writer(file)
ff.writerow(head)#リストの数だけループ
for i in range(len(responseJson.get("prefixes"))):#AMAZONに該当するserviceにすべてのAWSのIPが含まれています
if responseJson.get("prefixes")[i].values()[2] == 'AMAZON':
ff.writerow(responseJson.get("prefixes")[i].values())
ところで最近は、withでファイルオープンがモダンなやり方だそうです。
一旦IPアドレスのcsvファイルができあがりました。
次回はAWS以外のIPアドレスの範囲を取得したいと思います。