《Python網(wǎng)絡(luò)爬蟲》3.2 BeautifulSoup基本元素

By 一頁編程


我們知道BeautifulSoup庫是能夠解析html和xml文件的功能庫,那么我們該怎么理解它呢?

我們以html文件為例,任何一個(gè)html文件,如果打開它的源代碼,我們都能看到。它是由一組尖括號構(gòu)成的標(biāo)簽組織起來的,這里邊每一對尖括號形成了一個(gè)標(biāo)簽,而標(biāo)簽之間存在上下游關(guān)系,形成了一個(gè)標(biāo)簽樹。

所以我們可以說BeautifulSoup庫是解析、遍歷、維護(hù)標(biāo)簽樹的功能庫。只要你提供的文件是標(biāo)簽類型,那么BeautifulSoup庫都可以做很好的解析。

標(biāo)簽的基本結(jié)構(gòu)

我們以p標(biāo)簽為例。

<p class="title">......</p>

p標(biāo)簽是以一對尖括號形成的一個(gè)標(biāo)簽類型,單詞p就是這個(gè)標(biāo)簽的名稱。除了表示標(biāo)簽名稱、范圍的<p></p>,還有一個(gè)鍵值對構(gòu)成的屬性域:class="title"。這樣的一個(gè)格式構(gòu)成了標(biāo)簽的基本結(jié)構(gòu)。

理解BeautifulSoup

BeautifulSoup庫本身解析的是html和xml文檔,那么這個(gè)文檔與標(biāo)簽樹是一一對應(yīng)的,經(jīng)過了BeautifulSoup類的處理,html或xml文檔這樣的標(biāo)簽樹,就被轉(zhuǎn)換成一個(gè)BeautifulSoup類。BeautifulSoup類就是能夠代表標(biāo)簽樹的一個(gè)類型。

事實(shí)上我們認(rèn)為html文檔、標(biāo)簽樹和BeautifulSoup類這三者是等價(jià)的。在這個(gè)等價(jià)的基礎(chǔ)上我們就可以通過BeautifulSoup類,使得標(biāo)簽樹形成了一個(gè)變量,而對這個(gè)變量的處理就是對標(biāo)簽樹的相關(guān)的處理。

from bs4 import BeautifulSoup
soup = BeautifulSoup(‘<html>data</html>’, 'html.parser')
soup2 = BeautifulSoup(open('D://demo.html'), 'html.parser')

解析器

之前的例子我們使用了html解析器,那么除了html解析器,BeautifulSoup庫也可以使用四種其他的解析器。

解析器 使用方法 條件
bs4的HTML解析器 BeautifulSoup(mk, 'html.parser') 安裝bs4庫
lxml的HTML解析器 BeautifulSoup(mk, 'lxml) pip install lxml
lxml的xml解析器 BeautifulSoup(mk, 'xml') pip install lxml
html5lib的解析器 BeautifulSoup(mk, 'html5lib') pip install html5lib

BeautifulSoup基本元素

下面我們介紹一下BeautifulSoup類的基本元素。

基本元素 說明
Tag 標(biāo)簽,最基本的信息組織單元,分別用<>和</>標(biāo)明開頭和結(jié)尾
Name 標(biāo)簽的名字,<p>...</p>的名字是’p‘,格式<tag>.name
Attributes 標(biāo)簽的屬性,字典組織形式,格式<tag>.attrs
NavigableString 標(biāo)簽內(nèi)非屬性字符串,格式<tag>.string
Comment 標(biāo)簽內(nèi)字符串的注釋部分,一種特殊的Comment類型
Tag

標(biāo)簽是BeautifulSoup類里邊的最基本的信息組織單元,它與html和xml文檔中的一對尖括號相對應(yīng),它分別是用尖括號和尖括號中代反斜杠來標(biāo)明開頭和結(jié)尾。

>>> soup = BeautifulSoup(demo, 'html.parser')
>>> soup.title
<title>This is a python demo page</title>
>>> soup.a
<a href="http://www.itdecent.cn/nb/11366912 class=" id="link1" py1"="">Python Crawler</a>
>>> 

可以看到soup.title返回了title標(biāo)簽的內(nèi)容,soup.a返回了a標(biāo)簽的內(nèi)容。

Name
>>> soup = BeautifulSoup(demo, 'html.parser')
>>> soup.title.name
'title'
>>> soup.a.name
'a'
>>> 

可以通過對任何一個(gè)標(biāo)簽使用點(diǎn)name的方式獲得它的名字,那么這個(gè)名字顯示出來是字符串類型。

Attributes
>>> soup = BeautifulSoup(demo, 'html.parser')
>>> tag = soup.a
>>> tag.attrs
{'href': 'http://www.itdecent.cn/nb/11366912 class=', 'py1"': '', 'id': 'link1'}
>>> 

我們知道標(biāo)簽的屬性是在標(biāo)簽中標(biāo)明標(biāo)簽特點(diǎn)的相關(guān)區(qū)域,以字典形式來組織??梢杂?code>.attrs來獲得屬性的信息。

NavigableString

在標(biāo)簽尖括號的之間,是一種字符串,我們可以用.string來獲得其中的內(nèi)容。

Comment

Comment是一種特殊的標(biāo)簽形式,表示html中的注釋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容