溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中bs4有什么用

發(fā)布時(shí)間:2021-10-18 15:48:07 來(lái)源:億速云 閱讀:160 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了Python中bs4有什么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

了解bs4

bs4(Beautiful Soup)是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)

它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式

Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間

BeautifulSoup

BeautifulSoup是bs4中非常重要的一個(gè)類
它利用html或xml文件快速生一個(gè)對(duì)象
我們可以借用該對(duì)象的方法和屬性快速獲取我們需要的數(shù)據(jù)
用法: BeatifulSoup(html, resolver)

解析器的選擇,根據(jù)不同的需求選擇響應(yīng)的解析器

Python中bs4有什么用


bs4中對(duì)象的種類

首先來(lái)看一段測(cè)試代碼:
import bs4
import requests
# html測(cè)試代碼 
#只包含一個(gè)div標(biāo)簽
#div中包含一個(gè)p標(biāo)簽,一段文本 和 一段注釋
html ='<div class="屬性"><p>p標(biāo)簽文本</p>div中文本<!--注釋代碼--></div>'

# 利用html字符串實(shí)例化BeautifulSoup對(duì)象
soup = bs4.BeautifulSoup(html,'html.parser')

# 利用.div的方式訪問(wèn)節(jié)點(diǎn)
print(type(soup.div),'--->',soup.div) 

# 利用.class的方式訪問(wèn)屬性
# 打印div節(jié)點(diǎn)中的元素和類型
for item in soup.div:
    print(type(item),'--->',item)
顯示結(jié)果:

Python中bs4有什么用


Beautiful Soup將復(fù)雜HTML文檔轉(zhuǎn)換成一個(gè)復(fù)雜的樹(shù)形結(jié)構(gòu)
每個(gè)節(jié)點(diǎn)都是Python對(duì)象
所有對(duì)象可以歸納為4種 
Tag , NavigableString , BeautifulSoup , Comment .

>Tag對(duì)象
    html文檔中每一個(gè)標(biāo)簽都會(huì)在BeautifulSoup中以Tag形式出現(xiàn)
    Tag中可以包含其他的Tag和其他部分對(duì)象
    Tag具有許多的屬性,可以用于訪問(wèn)標(biāo)簽或其子標(biāo)簽的屬性和文本等
    例如:
            Tag.name返回標(biāo)簽名
            Tag.string返回標(biāo)簽中的文本信息(Tag僅包含一個(gè)文本時(shí),多個(gè)用strings)
    Tag中的屬性通過(guò)賦值修改,會(huì)改動(dòng)相應(yīng)html文件中標(biāo)簽

>NavigableString對(duì)象
    Tag中的字符串用NavigableString對(duì)象來(lái)包裝
    作為字符串不能被直接編輯,但可以用replace()替換
    在BeautifulSoup外調(diào)用需使用unicode()方法

>BeautifulSoup對(duì)象
    包含一個(gè)文檔的全部?jī)?nèi)容
    大多數(shù)情況下可以看作是一個(gè)大的Tag對(duì)象,支持遍歷和搜索文檔樹(shù)

>Comment 對(duì)象
    Comment對(duì)象是一個(gè)特殊的NavigableString對(duì)象
    用來(lái)包裝文檔中的注釋和特殊字符串等

根據(jù)需求匹配節(jié)點(diǎn)或信息

find和findall方法
適用對(duì)象:Tag  BeautifulSoup

find會(huì)返回滿足條件的第一個(gè)節(jié)點(diǎn)
findall方法會(huì)以列表形式返回滿足匹配條件的所有節(jié)點(diǎn)

Tag.find('a',) # 返回Tag中第一個(gè)a標(biāo)簽節(jié)點(diǎn)
Tag.find('a',class_="hello") # 返回Tag中第一個(gè)class為"hello"的a標(biāo)簽
Tag.find_all('p',text='p標(biāo)簽文本') 
# 返回Tag中包含(string屬性為'p標(biāo)簽文本'的NavigableString節(jié)點(diǎn))的p標(biāo)簽

獲取文本信息

string,strings ,text 屬性和 get_text()方法
以上方法都可以用于獲取文本
適用對(duì)象:
    string 適用于bs4中的全體對(duì)象 (Tag  BeautifulSoup NavigableString Comment)
    strings ,text , get_text()     適用于    Tag  BeautifulSoup
區(qū)別:

    tag.strings返回一個(gè)生成器
    可以迭代獲取tag節(jié)點(diǎn)及其子孫節(jié)點(diǎn)中所有的NavigableString節(jié)點(diǎn)
    返回的是每一個(gè)元素類型都是NavigebleString節(jié)點(diǎn)

    tag.string
    當(dāng)tag的子節(jié)點(diǎn)只包含一個(gè)NavigebleString節(jié)點(diǎn),返回該節(jié)點(diǎn)
    當(dāng)tag只有一個(gè)子節(jié)點(diǎn)時(shí),返回該子節(jié)點(diǎn)的string屬性的返回值
    此外均返回None

    tag.get_text()返回一個(gè)字符串
    用于捕獲該節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)中的非注釋文本(即NavigebleString節(jié)點(diǎn)的string返回值)

    tag.text
    在bs4源碼中text是接收get_text()返回值的變量
    等同于tag.get_text()

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Python中bs4有什么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI