Re:ゼロから始めるBeatufulSoupによるXMLドキュメント作成【Python】

WebAPIなんかを使っていると、リクエストをするためにXML文字列をリクエストボディに含める要求方法なんかに出くわします。

Yahooショッピングの注文API関係なんかがそのタイプです。

普段は解析専門のBeautifulSoupですが、ゼロからXMLドキュメントの作成もできるんだぞって事を紹介します。

BeautifulSoupによるXML作成

PythonによるXML作成はメジャーどころで言うと、ElementTreeなんかが紹介されていることも多いですが、実はそれBeautifulSoupでも出来ちゃいます。

パース専門というイメージの強いBeautifulSoupですが、割と万能戦士なんですね。

今回はYahooショッピングの注文APIを例にリクエスト用のXMLを作ってみます。

目的のXMLドキュメント構成

ヤフーショッピングの注文検索APIを今回の題材とします。

要求されるリクエストのXML構造は以下の要件。

パラメータ説明
/Reqリクエストパラメータ
/Req/Search検索条件指定情報
/Req/Search/Result
(デフォルト : 10)
integer最大取得件数(上限値:2000)
/Req/Search/Start
(デフォルト : 1)
integer取得開始件数
/Req/Search/Sortstring・注文時間で昇順ソート:+order_time(デフォルト)
・注文時間で降順ソート:-order_time
/Req/Search/Condition検索条件
/Req/Search/Condition/
(検索条件キー)
検索条件
/Req/Search/Field
(必須)
string取得情報
/Req/SellerId
(必須)
stringストアアカウント

提示されているサンプルリクエストXML

XML階層構造を見極める

XMLって単純にテキスト量がJSONに比べて多くなるので、「うっ・・・」ってなりがちです。

XML全体で見ると、めちゃくちゃ複雑そうに見えますが、上の方で提示されているツリー構造だけみれば、割と単純なもんです。

「Req」というrootの中に「SellerId」「Search」があり、「Search」の中に「Result」「Start」「Sort」「Condition」「Field」の五つの兄弟要素が存在ます。

あまりに長かったので、上で要件を提示してはいませんが、更にCondition直下に条件指定のタグとテキストが兄弟として並ぶ構造です。

BeautifulSoupでXMLを作ってみる

XMLの作成とかはぶっちゃけた話、どのライブラリ作っても大してやることは変わりません(笑)

なら普段からスクレイピングで使い慣れているBeautifulSoupでやってみようと思い、今回の記事に至っています。

使うメソッドは、

  • append()
  • new_tag()

主にこの二つだけです。

XMLの外殻を作成

実際に作成していきます。

ここまでで要求されているXMLの外殻が完成です。
完成したXMLは以下の状態。

何かそれっぽくなりましたね。
後は中身をブチ込んでいきます。

タグ内の要素を作成

今回はディフォルトと必須項目を入れていってみます。

Field内にタグは不要なのでリスト型、コンディションはタグが必要なので辞書型で適当にリクエスト作成してXMLにしてみます。

要件の確認はリファレンスから。

Field と Conditionのダミーデータ作成

XMLのタグ内に代入していく

XML完成系

BeautifulSoupによるXML作成 - 総括

元々パーサのイメージが強いBeautifulSoupですが、十分にXML作成の機能があることは伝わったかと思います。

結構万能なので使い始めると手放せない便利なヤツです。

元々フォーマットが決まっている場合は、わざわざ0から作らなくても、空枠をXMLファイルとして保管しておいて、BeautifulSoupで「テンプレ読み込み」→「代入」→「再出力」なんかでもいいかもしれませんね。

当たり前ですが、XMLの作成だけでなくパース(解析)もできます。以下の記事で紹介してますので、気になる方は覗いてみてください。

¥2,700 (2019/09/19 00:25:02時点 Amazon調べ-詳細)