<Python, Beautiful Soup> ちと、遊んでみた。
ちと、用事があり、Beautiful Soup
でxml
をパース。
次の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