iT邦幫忙

0

從0開始的python之路-29

  • 分享至 

  • xImage
  •  

限制搜尋節點數量
find_all 預設會輸出所有符合條件的節點,但若是遇到節點數量很多的時候,就會需要比較久的計算時間,如果我們不需要所有符合條件的節點,可以用 limit 參數指定搜尋節點數量的上限值,這樣它就只會找出前幾個符合條件的節點

遞迴搜尋
預設的狀況下,find_all 會以遞迴的方式尋找所有的子節點,如果想要限制 find_all 只找尋次一層的子節點,可以加上 recursive=False 關閉遞迴搜尋功能

以 HTML 屬性搜尋
我們也可以根據網頁 HTML 元素的屬性來萃取指定的 HTML 節點,我們可以結合 HTML 節點的名稱與屬性進行更精確的搜尋,搜尋屬性時,也可以使用正規表示法,我們也可以同時使用多個屬性的條件進行篩選,在 HTML5 中有一些屬性名稱若直接寫在 Python 的參數中會有一些問題,遇到這種狀況,可以把屬性的名稱與值放進一個 dictionary 中,再將此 dictionary 指定給 attrs 參數即可

以 CSS 搜尋
由於 class 是 Python 程式語言的保留字,所以 Beautiful Soup 改以 class_ 這個名稱代表 HTML 節點的 class 屬性,CSS 的 class 屬性也可以使用正規表示法搜尋,一個 HTML 標籤元素可以同時有多個 CSS 的 class 屬性值,而我們在以 class_ 比對時,只要其中一個 class 符合就算比對成功,我們也可以拿完整的 class 字串來進行比對,不過如果多個 class 名稱排列順序不同時,就會失敗,遇到多個 CSS class 的狀況,建議改用 CSS 選擇器來篩選

以文字內容搜尋
若要依據文字內容來搜尋特定的節點,可以使用 find_all 配合 string 參數,亦可使用正規表示法批配文字內容

向上、向前與向後搜尋
前面介紹的 find_all 都是向下搜尋子節點,如果需要向上搜尋父節點的話,可以改用 find_parents 函數(或是 find_parent),它可讓我們以某個特定節點為起始點,向上搜尋父節點,如果想要在在同一層往前尋找特定節點,則可用 find_previous_siblings 函數,如果想要在在同一層往後尋找特定節點,則可用 find_next_siblings 函數


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言