过滤功能
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"))