天天看點

Python BeautifulSoup的 find() 和 findAll()

BeautifulSoup 裡的 find() 和 findAll() 可能是你最常用的兩個函數。借助它們,你可以通

過标簽的不同屬性輕松地過濾 HTML 頁面,查找需要的标簽組或單個标簽

BeautifulSoup 文檔裡兩者的定義就是這樣:

findAll(tag, attributes, recursive, text, limit, keywords)

find(tag, attributes, recursive, text, keywords)

很可能你會發現,自己在 95% 的時間裡都隻需要使用前兩個參數: tag 和 attributes,但是我們應該還是仔細觀察所有的參數

标簽參數 tag :傳一個标簽的名稱或多個标簽名稱組成的 Python清單做标簽參數。

例如,下面的代碼将傳回一個包含 HTML 文檔中所有标題标簽的清單: .findAll({"h1","h2","h3","h4","h5","h6"})

屬性參數 attributes :是用一個 Python 字典封裝一個标簽的若幹屬性和對應的屬性值。

例如,下面這個函數會傳回 HTML 文檔裡紅色與綠色兩種顔色的 span 标簽:.findAll("span", {"class":{"green", "red"}}

遞歸參數 recursive 是一個布爾變量,如果recursive 設定為 True , findAll 就會根據你的要求去查找标簽參數的所有子标簽,以及子

标簽的子标簽。如果 recursive 設定為 False , findAll 就隻查找文檔的一級标簽。 findAll預設是支援遞歸查找的( recursive 預設值是 True );一般情況下這個參數不需要設定,除非你真正了解自己需要哪些資訊,而且抓取速度非常重要,那時你可以設定遞歸參數。

文本參數 text:是用标簽的文本内容去比對,而不是用标簽的屬性。

範圍限制參數 limit :隻用于 findAll 方法。 find 其實等價于 findAll 的 limit 等于1 時的情形。如果你隻對網頁中擷取的前 x 項結果感興趣,就可以設定它。但是要注意,這個參數設定之後,獲得的前幾項結果是按照網頁上的順序排序的,未必是你想要的那前幾項。

還有一個關鍵詞參數 keyword:可以讓你選擇那些具有指定屬性的标簽,例如:

allText = bsObj.findAll(id="text")

print(allText[0].get_text())