BeautifulSoup的搜索机制接受一个callable,文档似乎为您推荐这种情况:“如果您需要对标记的属性施加复杂的或互锁的限制,请为名称传递可调用的对象,…”。(好吧……他们在专门讨论属性,但是建议反映了BeautifulSoup
API的基本精神)。
如果您想要单线:
soup.findAll(lambda tag: tag.name == 'a' and tag.findParent('strong', 'sans') and tag.findParent('strong', 'sans').findParent('td', attrs={'width':'50%'}))我在此示例中使用了lambda,但实际上,如果您有多个链式需求,则可能需要定义一个可调用函数,因为该lambda必须进行两次
findParent('strong','sans')调用以避免<a>在没有
strong父标记的情况下引发异常。使用适当的功能,可以提高测试效率。



