簡介
BeautifulSoup是一個解析HTML或XML文件的庫。
對於HTML或XML文件,可以用DOM模型解釋。DOM模型可看作節點的集合,它有三種節點:
- 元素節點
- 文本節點
- 屬性節點
元素節點即HTML或XML的標簽,文本節點即標簽內部的文本內容,屬性節點即每個標簽的屬性。
總的來說,BeautifulSoup庫即是對上述三種節點的操作。
對象介紹
BeautifulSoup庫有四類對象,這里介紹它們的常用方法和屬性。
BeautifulSoup對象
該對象是這庫的起點,它表示HTML或XML文檔,該對象由BeautifulSoup()
實例化。
BeautifulSoup()
接受一個str
或byte
對象,由於該庫自帶編碼自動檢測,它會把當前文檔編碼並轉換成Unicode
編碼。
該對象除沒有name和attribute屬性,其用法基本和Tag
對象相同。
Tag對象
Tag.name
返回標簽的名字。
Tag.attrs
返回標簽的屬性鍵值對,是一個dict
對象。
Tag[attr]
獲取屬性值。如果屬性在HTML中是多值屬性,則返回list
對象,否則返回str
對象。
Tag[attr] = value
為屬性賦值。如果屬性在HTML中是多值屬性,則value是list
對象,否則是str
對象。
Tag.string
返回文本節點。如果標簽內部文本節點不唯一,則返回Null。
Tag.strings
返回標簽內所有文本節點。
Tag.contents
返回子節點列表,是list
對象。
NavigableString對象
該對象指Tag內部的文本節點, Tag.string
和Tag.strings
即返回該對象。
由於文本節點無法編輯,只能替換。我們可以通過NavigableString
對象的Tag.string.replace_with()
方法替換文本節點,該方法接受一個str
對象。
Comment對象
Comment
對象可以說是NavigableString
類的子類,它返回注釋標簽的文本節點。
文檔樹
搜索文檔樹
主要方法是find_all( name , attrs , recursive , text , **kwargs )
。
參數name
指標簽名字,可以是字符串、正則表達式、列表、方法。如果傳入正則表達式,BeautifulSoup會自動調用match()
匹配內容;如果傳入列表,只要列表中某個成員匹配即返回;如果傳入方法,它接受一個參數Tag
,只要返回True
即匹配。
attrs
是dict
對象,代表標簽的屬性鍵值對。它的屬性值可以是字符串、正則表達式、列表、方法,可選關鍵字kwargs
其屬性值同此一樣。
text
參數可以搜搜文檔中的字符串內容。與name
參數的可選值一樣,text
參數接受字符串,正則表達式 ,列表,方法。
limit
參數限制返回的條目數量,即列表的長度。
recursive
是個開關,該方法默認放回所有子孫節點,如果recursive=False
,方法只返回兒子節點。
遍歷文檔樹
Tag.children
,僅返回子節點。
Tag.descendants
,返回子孫節點
Tag.parent
,僅返回父節點。
Tag..parents
,返回父輩節點。
Tag.previous_sibling
,返回上個同級兄弟節點。
Tag.next_sibling
,返回下個同級兄弟節點。
Tag.previous_siblings
,返回上面同級兄弟節點。
Tag.next_siblings
,返回下面同級兄弟節點。
其他
Tag.get_text()
返回tag中包含的文本內容,包括子孫tag中的內容。
BeautifulSoup.original_encoding
獲取原文檔的編碼。
BeautifulSoup
對象和Tag
的prettify()
方法可以格式化輸出,該方法默認輸出編碼為UTF-8
。