GUST NOTCH? DIARY

BeautifulSoup の代わりにElementTree を使ってみた

Pythonista の BeautifulSoup では XML パーザが使えないっぽい。理由としては lxml パーザは各環境で C で実装されているライブラリやモジュールが呼ばれているからとかなんとか。
というわけで、標準モジュールとして入っている ElementTree を使ってみることにした。

ひとまず欲しいのは XML ファイルとして出力すること。でも、ドキュメントは読み込みの方がメインで書いてあるので少し試行錯誤した。
結局取った方法は

import xml.etree.ElementTree as ET

root = ET.fromstring(‘<toplevel_tag></toplevel_tag>’)

として最初の入れ物だけ作って

tag = ET.SubElement(root,’new_tag’)
tag.set(‘attr_name’,’attr_val’)

のようにして構築。
ファイルへの出力は、

with open("filename.xml", mode='w', encoding='utf-8') as f:
    f.write('<?xml version="1.0" encoding="utf-8"?>')
    f.write(ET.tostring(root,encoding='unicode'))

とすれば良さそうだった。
XMLの宣言文はつかないので自分で追加。
open の方は Python そのもののお作法なので encoding=‘utf-8’ を指定。一方、 ET.tostring の方では ElementTree のお作法に則って ‘unicode’ と指定しないといけない。
あと、日本語を含むファイルの読み書きの open の際には encoding=‘utf-8’ を指定しないとエラーになる。Pythonista ではデフォルトが us-ascii らしい。
ドキュメントには ElementTree.write() というメソッドがあったんだけど使えなかった。
Console で

print(ET.VERSION)

をしてみたら 1.3.0 と返ってきた。新しいのか古いのかよくわからん。
ひとまず出力はできたので、今度は読み込んで解析するところに取りかかろう。