Justin, Wow! I thought there might be a 'simple' way! thanks so much, you've given me a lot to chew on.
Jon __________ J.J. Crump Dept. of History 353560 University of Washington Seattle, WA. 98195 On Wed, 11 Apr 2007, Justin Ezequiel wrote: > On Apr 12, 4:15 am, Jon Crump <[EMAIL PROTECTED]> wrote: > >> Is it possible to feed findAll() a list of tags WITH attributes? > >>>> BeautifulSoup.__version__ > '3.0.3' >>>> s = '''<x>\n<z>boo</z>\n<z a="foo" b="bar">hello</z>\n<y >>>> a="bar">boo</y>\n<y a="foo">hi</y>\n</x>''' >>>> soup = BeautifulSoup.BeautifulSoup(s) >>>> def func(tag): > ... if tag.name not in ('y', 'z'): return False > ... if tag.name=='y': return tag.get('a')=='foo' > ... return tag.get('a')=='foo' and tag.get('b')=='bar' > ... >>>> soup.findAll(func) > [<z a="foo" b="bar">hello</z>, <y a="foo">hi</y>] >>>> def get_func(lst): > ... def func(tag): > ... for name, attrs in lst: > ... if tag.name==name: > ... for k, v in attrs.items(): > ... if tag.get(k, None)==v: continue > ... else: return False > ... else: return True > ... else: return False > ... return func > ... >>>> func2 = get_func([('y', {'a': 'foo'}), ('z', {'b': 'bar', 'a': 'foo'})]) >>>> soup.findAll(func2) > [<z a="foo" b="bar">hello</z>, <y a="foo">hi</y>] >>>> > > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list