最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用Beautiful Soup模塊創(chuàng)建對(duì)象詳解

 更新時(shí)間:2017年03月27日 14:35:09   作者:Glumes  
這篇文章主要介紹了Python利用Beautiful Soup模塊創(chuàng)建對(duì)象的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。

安裝

通過(guò) pip 安裝 Beautiful Soup 模塊:pip install beautifulsoup4

還可以使用 PyCharm IDE 來(lái)寫(xiě)代碼,在 PyCharm 中的 Preferences 中找到 Project ,在里面搜索 Beautiful Soup 模塊,進(jìn)行安裝即可。

創(chuàng)建 BeautifulSoup 對(duì)象

Beautiful Soup 模塊廣泛使用從網(wǎng)頁(yè)中得到數(shù)據(jù)。我們能夠使用 Beautiful Soup 模塊從 HTML/XML 文檔中提取任何數(shù)據(jù),例如,網(wǎng)頁(yè)中的所有鏈接或者標(biāo)簽內(nèi)的內(nèi)容。

為了實(shí)現(xiàn)這一點(diǎn),Beautiful Soup 提供了不同的對(duì)象和方法。任何的 HTML/XML 文檔能夠轉(zhuǎn)化成不同的 Beautiful Soup 對(duì)象,這些對(duì)象有著不同的屬性和方法,我們能夠從中提取到需要的數(shù)據(jù)。

Beautiful Soup 總共有如下三種對(duì)象:

  1. BeautifulSoup
  2. Tag
  3. NavigableString

創(chuàng)建 BeautifulSoup 對(duì)象

創(chuàng)建一個(gè) BeautifulSoup 對(duì)象是任何 Beautiful Soup 工程的起點(diǎn)。

BeautifulSoup 可以通過(guò)傳一個(gè)字符串或者類(lèi)文件對(duì)象(file-like object),例如機(jī)器上的文件或者網(wǎng)頁(yè)。

通過(guò)字符串創(chuàng)建 BeautifulSoup 對(duì)象

在 BeautifulSoup 的構(gòu)造器中通過(guò)傳遞一個(gè)字符串來(lái)創(chuàng)建對(duì)象。

helloworld = '<p>Hello World</p>'
soup_string = BeautifulSoup(helloworld)
print soup_string 
<html><body><p>Hello World</p></body></html>

通過(guò)類(lèi)文件對(duì)象創(chuàng)建 BeautifulSoup 對(duì)象

在 BeautifulSoup 的構(gòu)造器中通過(guò)傳遞一個(gè)類(lèi)文件對(duì)象(file-like object)來(lái)創(chuàng)建對(duì)象。這在解析在線網(wǎng)頁(yè)時(shí)非常有用。

url = "http://www.glumes.com"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page)
print soup

除了傳遞類(lèi)文件對(duì)象之外,我們還可以傳遞本地文件對(duì)象到 BeautifulSoup 的構(gòu)造器來(lái)生成對(duì)象。

with open('foo.html','r') as foo_file :
 soup_foo = BeautifulSoup(foo_file)
print soup_foo

為 XML 解析創(chuàng)建 BeautifulSoup 對(duì)象

Beautiful Soup 模塊同樣能夠用來(lái)解析 XML 。

當(dāng)創(chuàng)建一個(gè) BeautifulSoup 對(duì)象時(shí), Beautiful Soup 模塊將會(huì)選擇合適的 TreeBuilder 類(lèi)來(lái)創(chuàng)建 HTML/XML 樹(shù)。默認(rèn)情況下,選擇 HTML TreeBuilder 對(duì)象,它將使用默認(rèn)的 HTML 解析器,產(chǎn)生一個(gè) HTML 結(jié)構(gòu)樹(shù)。在上面的代碼中,由字符串生成 BeautifulSoup 對(duì)象,就是將它解析成了 HTML 樹(shù)結(jié)構(gòu)。

如果我們想要 Beautiful Soup 模塊將輸入的內(nèi)容解析為 XML 類(lèi)型,那么就需要在 Beautiful Soup 構(gòu)造器中精確指定使用的 features 參數(shù)。通過(guò)特定的 features 參數(shù),Beautiful Soup 將會(huì)選擇最適合的 TreeBuilder 類(lèi)來(lái)滿足我們想要的特征。

理解 features 參數(shù)

每一個(gè) TreeBuilder 根據(jù)它使用的解析器將會(huì)有不同的特征。因此,輸入的內(nèi)容根據(jù)傳遞到構(gòu)造器的 features 參數(shù)也會(huì)有不同的結(jié)果。
在 Beautiful Soup 模塊中,TreeBuilder 當(dāng)前使用的解析器如下:

  1. lxml
  2. html5lib
  3. html.parser

BeautifulSoup 構(gòu)造器的 features 參數(shù)能夠接受一個(gè)字符串列表或一個(gè)字符串值。

當(dāng)前,每一個(gè) TreeBuilder 支持的 features 參數(shù)和解析器如下表所示:

Features TreeBuilder Parser
[‘lxml','html','fast','permissive'] LXMLTreeBuilder lxml
[‘html','html5lib','permissive','strict','html5′] HTML5TreeBuilder html5lib
[‘html','strict','html.parser'] HTMLParserTreeBuilder html.parser
[‘xml','lxml','permissive','fast'] LXMLTreeBuilderForXML lxml

根據(jù)指定的 feature 參數(shù),Beautiful Soup 將會(huì)選擇最合適的 TreeBuilder 類(lèi)。如果在指定對(duì)應(yīng)的解析器時(shí),出現(xiàn)如下的報(bào)錯(cuò)信息,可能就是需要安裝對(duì)應(yīng)的解析器了。

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. 
Do you need to install a parser library?

就 HTML 文檔而言,選擇 TreeBuilder 的順序是基于解析器建立的優(yōu)先級(jí),就如上表格所示的優(yōu)先級(jí)。首先是 lxml ,其次是 html5lib ,最后才是 html.parser 。例如,我們選擇 html 字符串作為 feature 參數(shù),那么如果 lxml 解析器可用,則 Beautiful Soup 模塊將會(huì)選擇 LXMLTreeBuilder 。如果 lxml 不可用,則會(huì)選擇 根據(jù) html5lib 解析器選擇 HTML5TreeBuilder 。如果在不可用,則會(huì)選擇根據(jù) html.parser 選擇 HTMLParserTreeBuilder 了。

至于 XML ,由于 lxml 是唯一的解析器,所以 LXMLTreeBuilderForXML 總是會(huì)被選擇的。

所以,為 XML 創(chuàng)建一個(gè) Beautiful Soup 對(duì)象的代碼如下:

helloworld = '<p>Hello World</p>'
soup_string = BeautifulSoup(helloworld,features="xml")
print soup_string

輸入的結(jié)果也是 XML 形式的文件 :

在創(chuàng)建 Beautiful Soup 對(duì)象時(shí),更好的實(shí)踐是指定解析器。這是因?yàn)椋煌慕馕銎鹘馕龅慕Y(jié)果內(nèi)容大不相同,尤其是在我們的 HTML 文檔內(nèi)容非法時(shí),結(jié)果更為明顯。

當(dāng)我們創(chuàng)建一個(gè) BeautifulSoup 對(duì)象時(shí),Tag 和 NavigableString 對(duì)象也就創(chuàng)建了。

創(chuàng)建 Tag 對(duì)象

我們可以從 BeautifulSoup 對(duì)象中得到 Tag 對(duì)象,也就是 HTML/XML 中的標(biāo)簽。

如下 HTML 代碼所示:

#!/usr/bin/python
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
html_atag = """
 <html>
 <body>
 <p>Test html a tag example</p>
 <a >Home</a>
 <a href="http;//www.glumes.com/index.html'>Blog</a>
 </body>
 <html>
 """
soup = BeautifulSoup(html_atag,'html.parser')
atag = soup.a
print type(atag)
print atag

從結(jié)果中可以看到 atag 的類(lèi)型是 <class 'bs4.element.Tag'>  。而 soup.a 的結(jié)果就是 HTML 文檔中的第一個(gè) <a> 標(biāo)簽。
HTML/XML 標(biāo)簽對(duì)象具有名稱(chēng)和屬性。名稱(chēng)就是標(biāo)簽的名字,例如 標(biāo)簽 <a> 的名稱(chēng)就是 a 。屬性則是標(biāo)簽的 class 、id 、style 等。Tag 對(duì)象允許我們得到 HTML 標(biāo)簽的名稱(chēng)和屬性 。

Tag 對(duì)象的名稱(chēng)

通過(guò) .name 方式得到 Tag 對(duì)象的名稱(chēng) 。

tagname = atag.name
print tagname 

同時(shí)也能夠改變 Tag 對(duì)象的名稱(chēng):

atag.name = 'p'

這樣就將上面 HTML 文檔中的第一個(gè) <a> 標(biāo)簽名稱(chēng)換成了 <p> 標(biāo)簽了。

Tag 對(duì)象的屬性

在 HTML 頁(yè)面中,標(biāo)簽可能有不同的屬性,例如 class 、id 、style 等。Tag 對(duì)象能夠以字典的形式訪問(wèn)標(biāo)簽的屬性。

atag = soup_atag.a
print atag 

也能通過(guò) .attrs 的方式訪問(wèn)到,這樣會(huì)將所有的屬性?xún)?nèi)容都打印出來(lái) :

print atag.attrs
{'href': u'http://www.glumes.com'}

創(chuàng)建 NavigableString 對(duì)象

NavigableString 對(duì)象持有 HTML 或 XML 標(biāo)簽的文本內(nèi)容。這是一個(gè) Unicode 編碼的字符串。

我們可以通過(guò) .string 的方式得到標(biāo)簽的本文內(nèi)容 。

navi = atag.string
print type(navi)
print navi.string

小結(jié)

代碼小結(jié)如下:

BeautifulSoup

  • soup = BeautifulSoup(String)
  • soup = BeautifulSoup(String,features=”xml”)

Tag

  • tag = soup.tag
  • tag.name
  • tag[‘a(chǎn)ttribute']

NavigableString

  • soup.tag.string

總結(jié)

以上就是關(guān)于Python使用Beautiful Soup模塊創(chuàng)建對(duì)象的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • 詳解解Django 多對(duì)多表關(guān)系的三種創(chuàng)建方式

    詳解解Django 多對(duì)多表關(guān)系的三種創(chuàng)建方式

    本文主要介紹了詳解解Django 多對(duì)多表關(guān)系的三種創(chuàng)建方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • pandas多層索引的創(chuàng)建和取值以及排序的實(shí)現(xiàn)

    pandas多層索引的創(chuàng)建和取值以及排序的實(shí)現(xiàn)

    這篇文章主要介紹了pandas多層索引的創(chuàng)建和取值以及排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 基于python代碼批量處理圖片resize

    基于python代碼批量處理圖片resize

    這篇文章主要介紹了基于python代碼批量處理圖片resize,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python自動(dòng)化測(cè)試之setUp與tearDown實(shí)例

    python自動(dòng)化測(cè)試之setUp與tearDown實(shí)例

    這篇文章主要介紹了python自動(dòng)化測(cè)試之setUp與tearDown實(shí)例,其中setUp()方法中進(jìn)行測(cè)試前的初始化工作,并在tearDown()方法中執(zhí)行測(cè)試后的清除工作,setUp()和tearDown()都是TestCase類(lèi)中定義的方法,需要的朋友可以參考下
    2014-09-09
  • python plotly畫(huà)柱狀圖代碼實(shí)例

    python plotly畫(huà)柱狀圖代碼實(shí)例

    這篇文章主要介紹了python plotly畫(huà)柱狀圖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • PyQt5 closeEvent關(guān)閉事件退出提示框原理解析

    PyQt5 closeEvent關(guān)閉事件退出提示框原理解析

    這篇文章主要介紹了PyQt5 closeEvent關(guān)閉事件退出提示框原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python中標(biāo)準(zhǔn)庫(kù)OS的常用方法總結(jié)大全

    Python中標(biāo)準(zhǔn)庫(kù)OS的常用方法總結(jié)大全

    python中的OS庫(kù)提供了使用各種操作系統(tǒng)功能的接口。是經(jīng)常用到的一個(gè)庫(kù),所以這篇文章主要給大家總結(jié)介紹了關(guān)于Python中標(biāo)準(zhǔn)庫(kù)OS的常用方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • Pytest+Allure使用示例教程

    Pytest+Allure使用示例教程

    Allure是開(kāi)源的免費(fèi)的自動(dòng)化測(cè)試報(bào)告,支持Java,Python,我們來(lái)看看如何使用Python pytest與Allure整合,輸出漂亮的測(cè)試報(bào)告,這篇文章主要介紹了Pytest+Allure使用教程,需要的朋友可以參考下
    2023-12-12
  • Python科學(xué)畫(huà)圖代碼分享

    Python科學(xué)畫(huà)圖代碼分享

    這篇文章主要介紹了Python科學(xué)畫(huà)圖代碼分享,涉及matplotlib庫(kù)的簡(jiǎn)單介紹,分享了matplotlib繪圖庫(kù)書(shū)籍的下載地址,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python多版本安裝與Jupyter Lab使用方式

    Python多版本安裝與Jupyter Lab使用方式

    這篇文章主要介紹了Python多版本安裝與Jupyter Lab使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論

玛曲县| 海丰县| 任丘市| 治县。| 嘉峪关市| 疏勒县| 肥西县| 英山县| 永德县| 敦煌市| 宣化县| 东阳市| 商城县| 桂平市| 腾冲县| 大名县| 晋城| 浦江县| 醴陵市| 中山市| 长泰县| 宽甸| 新丰县| 太仓市| 元氏县| 遂宁市| 呼伦贝尔市| 永福县| 凉山| 镇原县| 瑞安市| 城市| 怀集县| 固安县| 沾化县| 理塘县| 长春市| 东安县| 安西县| 贺兰县| 当雄县|