Beautiful Soup將復(fù)雜HTML文檔轉(zhuǎn)換成一個復(fù)雜的樹形結(jié)構(gòu),每個節(jié)點(diǎn)都是Python對象,所有對象可以歸納為4種:
Tag
NavigableString
BeautifulSoup
Comment
可以通過type(soup.元素)來判斷對象類型
下面以豆瓣讀書為例舆乔,進(jìn)行實(shí)例說明(https://book.douban.com/)寺晌。1.首先通過request獲取首頁HTML文檔,如下:
然后我們來看看通過beautifulsoup轉(zhuǎn)換后的樹狀文檔:
1. Tag:下面的<html,<title,<meta等標(biāo)簽加上后面的內(nèi)容就是tag了。
1.1獲取標(biāo)簽:語句soup.標(biāo)簽名:即可以查找出該標(biāo)簽的完整文檔拴驮,若存在多個相同標(biāo)簽名,則返回第一個標(biāo)簽。
1.2獲取元素類型
下面為了驗(yàn)證我們的判斷竿刁,即<>標(biāo)識標(biāo)簽部分的起始,我們用type()來驗(yàn)證下各元素的類型搪缨。
接下來我們看看標(biāo)簽由哪些屬性組成:name(名字)+attrs:
1.3獲取標(biāo)簽名和標(biāo)簽屬性
直觀判斷:緊靠<符號部分的字符串組即為標(biāo)簽的名食拜,而空格后的字符串即為標(biāo)簽的屬性。
可以分別通過soup.標(biāo)簽.name和soup.標(biāo)簽.attrs來加以驗(yàn)證和判斷副编。屬性與名稱通常為多對1關(guān)系负甸,即1個標(biāo)簽名對應(yīng)多個屬性,通過soup.標(biāo)簽.attrs可以獲取所有屬性并返回字典
選擇某個特定屬性soup.標(biāo)簽.attrs['']或者soup.標(biāo)簽['']
2.?NavigableString
既然我們已經(jīng)得到了標(biāo)簽的內(nèi)容齿桃,那么問題來了惑惶,我們要想獲取標(biāo)簽內(nèi)部的文字怎么辦呢?很簡單短纵,用 .string 即可.這部分是獨(dú)立于標(biāo)簽名稱和標(biāo)簽屬性之外的標(biāo)簽文字內(nèi)容
3. beautifulsoup
4. comment
II.遍歷樹狀文檔:
contents和children兩種方法
contents返回一個子節(jié)點(diǎn)列表(可以直接打哟邸)
children返回一個子節(jié)點(diǎn)迭代(不能直接打印,需要通過for xx in yy的語句獲取內(nèi)容)