过滤功能

BeautifulSoup 允许你通过为 find_all 和类似函数提供函数来过滤结果。这对于复杂的过滤器以及代码重用的工具非常有用。

基本用法

定义一个以元素作为唯一参数的函数。如果参数匹配,该函数应返回 True

def has_href(tag):
    '''Returns True for tags with a href attribute'''
    return  bool(tag.get("href"))

soup.find_all(has_href) #find all elements with a href attribute
#equivilent using lambda:
soup.find_all(lambda tag: bool(tag.get("href")))

另一个找到带有 href 值但不以其开头的标签的示例

为过滤函数提供额外的参数

由于传递给 find_all 的函数只能接受一个参数,因此制作适合在 find_all 中使用的函数的函数工厂有时会很有用。这对于使标签查找功能更加灵活非常有用。

def present_in_href(check_string):
    return lambda tag: tag.get("href") and check_string in tag.get("href")

soup.find_all(present_in_href("/partial/path"))