PythonでAzureのIPアドレスの範囲を取得し、CSVで出力する
前回に引き続き、 Microsoft Azureで公開されているxml形式のIPアドレスの範囲を取得し、CSVファイルとして出力します。
やるべきこととしては、
(1) AzureのWebサイト(※1)をスクレイピングし、データを取得。
(2)取得したxml形式のデータをcsv形式で書き込み、保存。
ファイルがxml形式になったことぐらいで、前回とそんなに変わらないですね。
1.AzureのWebサイトをスクレイピングし、データを取得
前回と同様、urllibとcsvライブラリをインポートします。加えて、xmlもインポート。
import urllib
import xml.etree.ElementTree as ET
import csv#ダウンロードしたいファイルを指定ファイル名で取得。
urllib.urlretrieve("https://download.microsoft.com/download/"
+ "0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_20160509.xml",
"Azure_PublicIPs.xml")取得したxmlファイルをパース。
tree = ET.parse("Azure_PublicIPs.xml")
root = tree.getroot()
2.取得したデータをcsv形式で書き込み、保存
xmlファイルのタグを.tagで取得し、csvファイルのヘッダにします。
また、attrib.values()でxmlの各要素が取得できます。
#ファイルオープン
with open('ip_prefix_azure.csv', 'w') as file:
ff = csv.writer(file)#csvのヘッダー
ff.writerow([root[0].tag] + [root[0][0].tag] + ["service"])
for i in range(len(root)):
for j in range(len(root[i])):#要素の数だけループ
ff.writerow(root[i].attrib.values() +
root[i][j].attrib.values() +
["azure"])
xml形式も一度理解してしまえば扱うのも容易ですね。
>>こちらも合わせてどうぞ
参考
※1 Download Microsoft Azure Datacenter IP Ranges from Official Microsoft Download Center
20.5. xml.etree.ElementTree — ElementTree XML API — Python 3.5.1 ドキュメント