BeautifulSoup的find()和findAll()


BeautifulSoup的提供了兩個超級好用的方法(可能是你用bs方法中最常用的)。借助這兩個函數,你可以通過表現的不同屬性輕松過濾HTML(XML)文件,查找需要的標簽組或單個標簽。

首先find(),findAll()是當有了bs對象之后,獲取標簽組或者單個標簽的函數。find()找到第一個滿足條件的標簽就返回,findAll()找到所有滿足條件的標簽返回。

 

看一下兩個函數的參數,findAll多了一個limit參數。 #參數不是每次用的時候需要把所有參數都要寫出來

findAll(tag,atributes,recursive,text,limit,keywords)
find(tag,atributes,recursive,text,keywords)

實例中多用findAll()函數,因為find()函數只返回一個,沒有代表性。

 

①參數tag,可以使用參數tag表明需要查找的標簽類型,tag可以是多個:

.findAll({'h1'}) #返回h1標簽列表
.findAll({'h1','h2','h3'}) #返回h1-h3標題標簽列表
.findAll({'h1','h2','h3','h4','h5','h6','h7'}) #返回所有標題標簽的列表

②參數attribute,使用標簽內的若干屬性對應的屬性值進行標簽查找,屬性值可以是多個

.findAll('span',{'class':{'green','red'}})  #返回class屬性為red和green的span標簽列表

③參數recursive,是否使用遞歸方法遍歷每一個子標簽,默認是開啟,True。如果設置為False,findAll()只查找文檔的一級標簽。一般使用中,不用去動這個參數

④參數text,根據標簽的文本內容去查找標簽列表,通常配合正則表達式使用

nameList = bsObj.findAll(text='the prince') #匹配所有標簽文本內容為‘the prince’的標簽列表
nameList = bsObj.findAll(text=re.compile('the*')) #匹配所有標簽文本內容為‘the’開頭的標簽列表,使用了正則表達式re,正則表達式在此文中不做講解

⑤參數limit,范圍限制參數,顯然只能用於findAll()函數。就是限定返回的個數,比如要抽取多少個標簽信息做樣本之類的

⑥參數keyword,標簽內指定屬性的標簽列表#與attribute參數相似,有一個例外就是用class屬性查找標簽的時候,直接findAll(class=‘green’)會報錯,因為class是保留字

bsObj.findAll(id='text')

bsObj.findAll(class='text')  #會報錯
bsObj.findAll(class_='text')解決方案

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM