欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python爬蟲解析器BeautifulSoup4怎么使用

這篇文章主要介紹“Python爬蟲解析器BeautifulSoup4怎么使用”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Python爬蟲解析器BeautifulSoup4怎么使用”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)公司自2013年起,先為德陽等服務(wù)建站,德陽等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為德陽企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

Python爬蟲解析器BeautifulSoup4怎么使用

一、BeautifulSoup4庫(kù)介紹

1. 介紹

Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù).它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間。

BeautifulSoup4將網(wǎng)頁轉(zhuǎn)換為一顆DOM樹:
Python爬蟲解析器BeautifulSoup4怎么使用

2. 下載模塊

1. window電腦點(diǎn)擊win鍵+ R,輸入:cmd

Python爬蟲解析器BeautifulSoup4怎么使用

2. 安裝beautifulsoup4,輸入對(duì)應(yīng)的pip命令pip install beautifulsoup4 ,我已經(jīng)安裝過了出現(xiàn)版本就安裝成功了

Python爬蟲解析器BeautifulSoup4怎么使用
3. 導(dǎo)包

form bs4 import BeautifulSoup

3. 解析庫(kù)

BeautifulSoup在解析時(shí)實(shí)際上依賴解析器,它除了支持Python標(biāo)準(zhǔn)庫(kù)中的HTML解析器外,還支持一 些第三方解析器(比如lxml):

解析器使用方法優(yōu)勢(shì)劣勢(shì)
Python標(biāo)準(zhǔn)庫(kù)BeautifulSoup(html,’html.parser’)Python的內(nèi)置標(biāo)準(zhǔn)庫(kù)、執(zhí)行速度適中、文檔容錯(cuò)能力強(qiáng)Python 2.7.3及Python3.2.2之前的版本文檔容錯(cuò)能力差
lxml HTML解析庫(kù)BeautifulSoup(html,’lxml’)速度快、文檔容錯(cuò)能力強(qiáng)需要安裝C語言庫(kù)
lxml XML解析庫(kù)BeautifulSoup(html,‘xml'速度快、唯一支持XML的解析器需要安裝C語言庫(kù)
htm5lib解析庫(kù)BeautifulSoup(html,’htm5llib’)最好的容錯(cuò)性、以瀏覽器的方式解析文檔、生成HTMLS格式的文檔速度慢、不依賴外部擴(kuò)展

對(duì)于我們來說,我們最常使用的解析器是lxml HTML解析器,其次是html5lib.

二、上手操作

1. 基礎(chǔ)操作

1. 讀取HTML字符串:

from bs4 import BeautifulSoup

html = '''
<p class="panel">
    <p class="panel-heading">
        <h5>Hello</h5>
    </p>
    <p class="panel_body">
        <ul class="list" id="list-1" name="element">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
                <a href="https://www.baidu.com">百度官網(wǎng)</a>
            <li class="element">Bar</li>
        </ul>
    </p>
</p> 
'''# 創(chuàng)建對(duì)象soup = BeautifulSoup(html, 'lxml')

2. 讀取HTML文件

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('index.html'),'lxml')

3. 基本方法

from bs4 import BeautifulSoup

html = '''
<p class="panel">
    <p class="panel-heading">
        <h5>Hello</h5>
    </p>
    <p class="panel_body">
        <ul class="list" id="list-1" name="element">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
                <a href="https://www.baidu.com">百度官網(wǎng)</a>
            <li class="element">Bar</li>
        </ul>
    </p>
</p> 
'''# 創(chuàng)建對(duì)象soup = BeautifulSoup(html, 'lxml')# 縮進(jìn)格式print(soup.prettify())# 獲取title標(biāo)簽的所有內(nèi)容print(soup.title)# 獲取title標(biāo)簽的名稱print(soup.title.name)# 獲取title標(biāo)簽的文本內(nèi)容print(soup.title.string)# 獲取head標(biāo)簽的所有內(nèi)容print(soup.head)# 獲取第一個(gè)p標(biāo)簽中的所有內(nèi)容print(soup.p)# 獲取第一個(gè)p標(biāo)簽的id的值print(soup.p["id"])# 獲取第一個(gè)a標(biāo)簽中的所有內(nèi)容print(soup.a)# 獲取所有的a標(biāo)簽中的所有內(nèi)容print(soup.find_all("a"))# 獲取id="u1"print(soup.find(id="u1"))# 獲取所有的a標(biāo)簽,并遍歷打印a標(biāo)簽中的href的值for item in soup.find_all("a"):
    print(item.get("href"))# 獲取所有的a標(biāo)簽,并遍歷打印a標(biāo)簽的文本值for item in soup.find_all("a"):
    print(item.get_text())

2. 對(duì)象種類

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

(1)Tag:Tag通俗點(diǎn)講就是HTML中的一個(gè)個(gè)標(biāo)簽,例如:

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>','lxml')
tag = soup.b
print(tag)
print(type(tag))

輸出結(jié)果:

<b class="boldest">Extremely bold</b>
<class 'bs4.element.Tag'>

Tag有很多方法和屬性,在 遍歷文檔樹 和 搜索文檔樹 中有詳細(xì)解釋.現(xiàn)在介紹一下tag中最重要的屬性: nameattributes

name屬性:

print(tag.name)
# 輸出結(jié)果:b
# 如果改變了tag的name,那將影響所有通過當(dāng)前Beautiful Soup對(duì)象生成的HTML文檔:
tag.name = "b1"
print(tag)
# 輸出結(jié)果:<b1 class="boldest">Extremely bold</b1>

Attributes屬性:

# 取clas屬性
print(tag['class'])

# 直接”點(diǎn)”取屬性, 比如: .attrs :
print(tag.attrs)

tag 的屬性可以被添加、修改和刪除:

# 添加 id 屬性
tag['id'] = 1

# 修改 class 屬性
tag['class'] = 'tl1'

# 刪除 class 屬性
del tag['class']

(2)NavigableString:用.string獲取標(biāo)簽內(nèi)部的文字:

print(soup.b.string)print(type(soup.b.string))

(3)BeautifulSoup:表示的是一個(gè)文檔的內(nèi)容,可以獲取它的類型,名稱,以及屬性:

print(type(soup.name))
# <type 'unicode'>

print(soup.name)
# [document]

print(soup.attrs)
# 文檔本身的屬性為空

(4)Comment:是一個(gè)特殊類型的 NavigableString 對(duì)象,其輸出的內(nèi)容不包括注釋符號(hào)。

print(soup.b)

print(soup.b.string)

print(type(soup.b.string))

3. 搜索文檔樹

1.find_all(name, attrs, recursive, text, **kwargs)

(1)name 參數(shù):name 參數(shù)可以查找所有名字為 name 的tag,字符串對(duì)象會(huì)被自動(dòng)忽略掉

  • 匹配字符串:查找與字符串完整匹配的內(nèi)容,用于查找文檔中所有的<a>標(biāo)簽

    a_list = soup.find_all("a")print(a_list)
  • 匹配正則表達(dá)式:如果傳入正則表達(dá)式作為參數(shù),Beautiful Soup會(huì)通過正則表達(dá)式的 match() 來匹配內(nèi)容

    # 返回所有表示<body>和<b>標(biāo)簽for tag in soup.find_all(re.compile("^b")):
        print(tag.name)
  • 匹配列表:如果傳入列表參數(shù),Beautiful Soup會(huì)將與列表中任一元素匹配的內(nèi)容返回

    # 返回所有所有<p>標(biāo)簽和<a>標(biāo)簽:soup.find_all(["p", "a"])

(2)kwargs參數(shù)

soup.find_all(id='link2')

(3)text參數(shù):通過 text 參數(shù)可以搜搜文檔中的字符串內(nèi)容,與 name 參數(shù)的可選值一樣, text 參數(shù)接受 字符串 , 正則表達(dá)式 , 列表

# 匹配字符串
soup.find_all(text="a")

# 匹配正則
soup.find_all(text=re.compile("^b"))

# 匹配列表
soup.find_all(text=["p", "a"])

4. css選擇器

我們?cè)谑褂肂eautifulSoup解析庫(kù)時(shí),經(jīng)常會(huì)結(jié)合CSS選擇器來提取數(shù)據(jù)。

注意:以下講解CSS選擇器只選擇標(biāo)簽,至于獲取屬性值和文本內(nèi)容我們后面再講。

1. 根據(jù)標(biāo)簽名查找:比如寫一個(gè) li 就會(huì)選擇所有l(wèi)i 標(biāo)簽, 不過我們一般不用,因?yàn)槲覀兌际蔷_到標(biāo)簽再提取數(shù)據(jù)的

from bs4 import BeautifulSoup

html = '''
<p class="panel">
    <p class="panel-heading">
        <h5>Hello</h5>
    </p>
    <p class="panel_body">
        <ul class="list" id="list-1" name="element">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
                <a href="https://www.baidu.com">百度官網(wǎng)</a>
            <li class="element">Bar</li>
        </ul>
    </p>
</p> 
'''# 創(chuàng)建對(duì)象soup = BeautifulSoup(html, 'lxml')# 1. 根據(jù)標(biāo)簽名查找:查找li標(biāo)簽print(soup.select("li"))

輸出結(jié)果:

[<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>, <li class="element">Foo</li>, <li class="element">Bar</li>]

2. 根據(jù)類名class查找.1ine, 即一個(gè)點(diǎn)加line,這個(gè)表達(dá)式選的是class= "line "的所有標(biāo)簽,".”代表class

print(soup.select(".panel_body"))

輸出結(jié)果:

</ul>
<ul class="list list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>]

3. 根據(jù)id查找。#box,即一個(gè)#和box表示選取id-”box "的所有標(biāo)簽,“#”代表id

print(soup.select("#list-1"))

輸出結(jié)果:

[<ul class="list" id="list-1" name="element">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>]

4. 根據(jù)屬性的名字查找。class屬性和id屬性較為特殊,故單獨(dú)拿出來定義一個(gè)". "“”來表示他們。

比如:input[ name=“username”]這個(gè)表達(dá)式查找name= "username "的標(biāo)簽,此處注意和xpath語法的區(qū)別

print(soup.select('ul[ name="element"]'))

輸出結(jié)果:

[<ul class="list" id="list-1" name="element">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>]

5. 標(biāo)簽+類名或id的形式。

# 查找id為list-1的ul標(biāo)簽
print(soup.select('ul#list-1'))
print("-"*20)
# 查找class為list的ul標(biāo)簽
print(soup.select('ul.list'))

輸出結(jié)果:

[<ul class="list" id="list-1" name="element">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>]
--------------------
[<ul class="list" id="list-1" name="element">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>, <ul class="list list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>]

6. 查找直接子元素

# 查找id="list-1"的標(biāo)簽下的直接子標(biāo)簽liprint(soup.select('#list-1>li'))

輸出結(jié)果:

[<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>]

7. 查找子孫標(biāo)簽

# .panel_body和li之間是一個(gè)空格,這個(gè)表達(dá)式查找id=”.panel_body”的標(biāo)簽下的子或?qū)O標(biāo)簽liprint(soup.select('.panel_body li'))

輸出結(jié)果:

[<li class="element">Foo</li>, <li class="element">Bar</li>, <li class="element">Jay</li>, <li class="element">Foo</li>, <li class="element">Bar</li>]

8. 取某個(gè)標(biāo)簽的屬性

# 1. 先取到<p class="panel_body">p = soup.select(".panel_body")[0]# 2. 再去下面的a標(biāo)簽下的href屬性print(p.select('a')[0]["href"])

輸出結(jié)果:

https://www.baidu.com

9. 獲取文本內(nèi)容有四種方式:

(a) string:獲得某個(gè)標(biāo)簽下的文本內(nèi)容,強(qiáng)調(diào)-一個(gè)標(biāo)簽,不含嵌我。 返回-個(gè)字符串

# 1. 先取到<p class="panel_body">p = soup.select(".panel_body")[0]# 2. 再去下面的a標(biāo)簽下print(p.select('a')[0].string)

輸出結(jié)果:

百度官網(wǎng)

(b) strings:獲得某個(gè)標(biāo)簽下的所有文本內(nèi)容,可以嵌套。返回-一個(gè)生成器,可用list(生成器)轉(zhuǎn)換為列表

print(p.strings)print(list(p.strings))

輸出結(jié)果:

<generator object Tag._all_strings at 0x000001AA58E525F0>['\n', '\n', 'Foo', '\n', 'Bar', '\n', 'Jay', '\n', '\n', '\n', 'Foo', '\n', '百度官網(wǎng)', '\n', 'Bar', '\n', '\n']

(c)stripped.strings:跟(b)差不多,只不過它會(huì)去掉每個(gè)字符串頭部和尾部的空格和換行符

print(p.stripped_strings)print(list(p.stripped_strings))

輸出結(jié)果:

<generator object PageElement.stripped_strings at 0x000001F9995525F0>['Foo', 'Bar', 'Jay', 'Foo', '百度官網(wǎng)', 'Bar']

(d) get.text():獲取所有字符串,含嵌套. 不過會(huì)把所有字符串拼接為一個(gè),然后返回
注意2:
前3個(gè)都是屬性,不加括號(hào);最后一個(gè)是函數(shù),加括號(hào)。

print(p.get_text())

輸出結(jié)果:

Foo
Bar
Jay


Foo
百度官網(wǎng)
Bar

關(guān)于“Python爬蟲解析器BeautifulSoup4怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

網(wǎng)頁題目:Python爬蟲解析器BeautifulSoup4怎么使用
分享URL:http://aaarwkj.com/article2/iijdic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)、網(wǎng)站策劃、電子商務(wù)、用戶體驗(yàn)搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)
国产av人妻精品一区二| 国产高清av免费在线观看| 国产三级三级三级免费看| av毛片在线观看地址| 亚洲国产日韩在线精品| 久久精品国产亚洲av久一一区 | 欧美欧美一区二区三区| 人妻少妇久久中文字幕久久| 99国产精品欲av麻豆在线观看| 色在线观看综合亚洲欧洲| 在线观看日韩三级av| 91在线国产手机视频| 国产在线精品成人欧美| 免费亚洲老熟熟女熟女熟女| 中文字幕在线看二区不卡| 亚洲欧洲久久激情久av| 粉嫩av蜜臀一区二区三区| 色哟哟视频在线免费观看| 高级会所口爆视频在线播放视频| 色婷婷综合激情一区二区| 亚洲精品福利在线视频| 日韩一区二区高清视频在线观看| 色综合亚洲一区二区小说| 国产精品伦一区二区视频| 在线观看高清国产黄色片| 国产精品国产亚洲精品| 少妇被按摩高潮在线观看| 日韩av人妻一区二区三区| 九九热久久这里全是精品| 91伊人手机在线观看| 精精国产xxxx视频在线不卡| 一区二区三区四区毛片| 日韩a国产v亚洲欧美精品| 久久精品国产亚洲av清纯| 在线看黄色片播放器日韩| 人妻av天堂综合一区| 播放欧美日韩特黄大片| 手机av在线 中文字幕| 老熟女乱色一区二区三区| 欧美日韩亚洲精品亚洲欧洲| 日韩精品不卡在线观看|