過濾功能

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"))