复杂美丽的汤查询

use*_*767 3 python beautifulsoup

这是我正在使用Beautiful Soup探索的HTML文件的片段.

<td width="50%">
    <strong class="sans"><a href="http:/website">Site</a></strong> <br /> 
Run Code Online (Sandbox Code Playgroud)

我想得到<a href>任何有哪个<strong class="sans">和哪个在里面的行<td width="50%">.

是否可以使用Beautiful Soup查询HTML文件中的多个条件?

Jar*_*die 11

BeautifulSoup的搜索机制接受一个可调用的文档,文档似乎为您的案例推荐:"如果您需要对标记的属性强加复杂或互锁限制,请传入一个可调用对象的名称,......".(好吧......他们专门讨论属性,但这些建议反映了BeautifulSoup API的基本精神).

如果你想要一个单行:

soup.findAll(lambda tag: tag.name == 'a' and \
tag.findParent('strong', 'sans') and \
tag.findParent('strong', 'sans').findParent('td', attrs={'width':'50%'}))
Run Code Online (Sandbox Code Playgroud)

我在这个例子中使用了lambda,但实际上你可能想要定义一个可调用的函数,如果你有多个链式的需求,因为这个lambda必须进行两次findParent('strong', 'sans')调用,以避免在<a>标签没有strong父项时引发异常.使用适当的功能,您可以提高测试效率.