find_all( )方法續講
上一節我們介紹了find_all( )方法,它是查詢所有符合條件的元素的,我們傳入一些屬性和文本進行,就可以得到符合條件的元素,它的功能十分強大,我們也介紹了它的API:find_all(name. attrs, recusive, text, **kwargs)
1.attrs
上一節中,我們詳細介紹了依靠根據節點名來查詢,這一節我們講介紹根據一些屬性來查詢,示例如下:
運行結果如下:
這裡查詢的時候傳入的是attrs參數,參數的類型是字典類型。比如,要查詢id為list-1的節點,可以傳入attrs={'id':'list-1'}的查詢條件,得到的結果是列表形式,包含的內容就是符合id為list-1的所有節點。在上面的例子中,符合條件的元素個數是1,所以結果長度是為1的列表。
對於一些常用的屬性,比如id和class等,我們可以不用attrs來傳遞。比如,要查詢id為list-1的節點,可以直接傳入id這個參數。還是上面的文本,我們換一種方式來查詢:
運行結果如下:
這裡直接傳入id='list-1',就可以查詢id為list-1的節點元素了。而對於class來說,由於class在python中是一個關鍵字,所以後面需要加上一個下劃線,即class_='element',返回的結果依然還是Tag組成的列表。
2.text
text參數可以用來匹配節點的文本,傳入的形式可以是字符串,可以是正則表達式對象,示例如下:
運行結果如下:
這裡有兩個a節點,其內部包含文本信息。這裡在find_all( )方法中傳入text參數,該參數為正則表達式對象,結果返回所有匹配正則表達式的節點文本組成的列表。
find( )
除了前面的find_all( )方法,還有find( )方法,只不過後者返回的是單個元素,也就是第一個匹配的元素,而前者返回的是所有匹配的元素組成的列表。示例如下:
運行結果如下:
這裡的返回結果不再是列表形式,而是第一個匹配的節點元素,類型依然是Tag類型。
另外,還有許多查詢方法,其用法與前面介紹的find_all( )、find( )方法完全相同,只不過查詢範圍不同,這裡簡單地對其進行說明:
find_parents( )和find_parent( ):前者返回所有祖先節點,後者返回直接父節點find_next_siblings( )和find_next_sibling( ):前者返回後面所有的兄弟節點,後者返回後面第一個兄弟節點。find_previous_siblings( )和find_previous_sibling( ):前者返回前面所有的兄弟節點,後者返回前面第一個兄弟節點。find_all_next( )和find_next( ):前者返回節點後所有符合條件的節點,後者返回第一個符合條件的節點。find_all_previous( )和find_previous( ):前面返回節點前所有符合條件的節點,後者返回第一個符合條件的節點。