<Python, Beautiful Soup> ちと、遊んでみた。

ちと、用事があり、Beautiful Soupxmlをパース。

次のxmlコードがあった場合、

<Hatena>
  <PersonList>
    <Person>
      <Name>Taro</Name>
      <Hair>Hage</Hair>
    </Person>
    <Person>
      <Name>Jiro</Name>
      <Hair>Hage</Hair>
    </Person>
    <Person>
      <Name>Saburo</Name>
      <Hair>Non_Hage</Hair>
    </Person>
    <Person>
      <Name>Shiro</Name>
      <Hair>Hage</Hair>
    </Person>
    <Person>
      <Name>Goro</Name>
      <Hair>Non_hage</Hair>
    </Person>
    <Person>
      <Name>Rokuro</Name>
      <Hair>Hage</Hair>
    </Person>
  </PersonList>
</Hatena>

で、こいつを読み込んでみる。

In [1]: from bs4 import Bea
BeautifulSoup       BeautifulStoneSoup

In [1]: from bs4 import BeautifulSoup

In [2]: import sys

In [3]: import pandas as pd

In [4]: xml = open('data_hatena.xml', 'r')

In [5]: soup = BeautifulSoup(xml, 'xml')

これで、オブジェクトsoupは、xmlをパースしたものになる。
あとは、find()とかfindALL()の関数methodで各要素にアクセス可。

In [6]: soup.find('Person')
Out[6]:
<Person>
<Name>Taro</Name>
<Hair>Hage</Hair>
</Person>

In [7]: soup.find('Person').Name
Out[7]: <Name>Taro</Name>

In [8]: soup.find('Person').Name.string
Out[8]: 'Taro'

あるいは、各タグはアトリビュートattributeになってるので、

 [9]: soup.Person
Out[9]:
<Person>
<Name>Taro</Name>
<Hair>Hage</Hair>
</Person>

In [10]: soup.Person.Name
Out[10]: <Name>Taro</Name>

In [11]: soup.Person.Name.string
Out[11]: 'Taro'

findAll()を使うと全要素をリストで返してくる。

In [13]: soup.findAll('Person')
Out[13]:
[<Person>
 <Name>Taro</Name>
 <Hair>Hage</Hair>
 </Person>, <Person>
 <Name>Jiro</Name>
 <Hair>Hage</Hair>
 </Person>, <Person>
 <Name>Saburo</Name>
 <Hair>Non_Hage</Hair>
 </Person>, <Person>
 <Name>Shiro</Name>
 <Hair>Hage</Hair>
 </Person>, <Person>
 <Name>Goro</Name>
 <Hair>Non_hage</Hair>
 </Person>, <Person>
 <Name>Rokuro</Name>
 <Hair>Hage</Hair>
 </Person>]

In [14]: soup.findAll('Name')
Out[14]:
[<Name>Taro</Name>,
 <Name>Jiro</Name>,
 <Name>Saburo</Name>,
 <Name>Shiro</Name>,
 <Name>Goro</Name>,
 <Name>Rokuro</Name>]

In [15]: soup.findAll('Hair')
Out[15]:
[<Hair>Hage</Hair>,
 <Hair>Hage</Hair>,
 <Hair>Non_Hage</Hair>,
 <Hair>Hage</Hair>,
 <Hair>Non_hage</Hair>,
 <Hair>Hage</Hair>]

にゃるほど~。。。

マニュアル。
kondou.com - Beautiful Soup 4.2.0 Doc. 日本語訳 (2013-11-19最終更新)

と、参考文献。
qiita.com