<Python, Beautiful Soup> FindAllの後の処理
Beautiful Soup
の使い方を少しメモ。
こういうhtml
があった時、
In [34]: xml = ''' ...: <d> ...: <name>Hage</name> ...: <qty>10</qty> ...: </d> ...: <d> ...: <name>Hige</name> ...: <qty>20</qty> ...: </d> ...: <d> ...: <name>Hoge</name> ...: <qty>12</qty> ...: </d> ...: <d> ...: <name>Haga</name> ...: <qty>15</qty> ...: </d> ...: '''
スープして、、
In [35]: from bs4 import BeautifulSoup In [36]: soup = BeautifulSoup(xml, 'lxml') In [37]: type(soup) Out[37]: bs4.BeautifulSoup In [38]: soup Out[38]: <html><body><d> <name>Hage</name> <qty>10</qty> </d> <d> <name>Hige</name> <qty>20</qty> </d> <d> <name>Hoge</name> <qty>12</qty> </d> <d> <name>Haga</name> <qty>15</qty> </d> </body></html>
d
を検索して、
In [39]: d = soup.findAll('d') In [40]: type(d) Out[40]: bs4.element.ResultSet In [41]: d Out[41]: [<d> <name>Hage</name> <qty>10</qty> </d>, <d> <name>Hige</name> <qty>20</qty> </d>, <d> <name>Hoge</name> <qty>12</qty> </d>, <d> <name>Haga</name> <qty>15</qty> </d>]
検索結果bs4.element.ResultSet
はどうもリストっぽい。
なら、リスト形式のアクセスは、
In [42]: d[0] Out[42]: <d> <name>Hage</name> <qty>10</qty> </d> In [43]: d[1] Out[43]: <d> <name>Hige</name> <qty>20</qty> </d> In [44]: len(d) Out[44]: 4
できるらしい。
そういうことなら、下記ループ。
In [47]: for v in d: ...: print(v.find('name').string) ...: print(v.find('qty').string) ...: Hage 10 Hige 20 Hoge 12 Haga 15
なるほどね~。
マニュアル。
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation