<Python, BeautifulSoup> 正規表現でマッチ
BeautifulSoup
でタグtag
を検索する時、正規表現regexp
する方法。
こういうxml
データがあったとき。
In [37]: s = ''' ...: <data> ...: <aaa>1</aaa> ...: <bbb>2</bbb> ...: <c55>3</c55> ...: </data> ...: '''
スープして、
In [38]: from bs4 import BeautifulSoup In [39]: soup = BeautifulSoup(s, 'xml') In [40]: soup Out[40]: <?xml version="1.0" encoding="utf-8"?> <data> <aaa>1</aaa> <bbb>2</bbb> <c55>3</c55> </data>
find
して、
In [41]: soup.find('data') Out[41]: <data> <aaa>1</aaa> <bbb>2</bbb> <c55>3</c55> </data>
検索。
In [42]: soup.find('data').findAll('aaa') Out[42]: [<aaa>1</aaa>] In [43]: soup.find('data').find('aa') [] In [44]: soup.find('data').find('.*') []
正規表現が効いていない。。。
なので、re
を呼び出して、compile
。
In [45]: import re In [50]: soup.find('data').findAll(re.compile('[a-z]')) Out[50]: [<aaa>1</aaa>, <bbb>2</bbb>, <c55>3</c55>] In [51]: soup.find('data').findAll(re.compile('[a-z]{3}')) Out[51]: [<aaa>1</aaa>, <bbb>2</bbb>] In [52]: soup.find('data').findAll(re.compile('.*')) Out[52]: [<aaa>1</aaa>, <bbb>2</bbb>, <c55>3</c55>]
いけるねー!
参考。
Life is very easy with Python: Beautiful Soup find_all() search API