過濾功能
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"))