欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

安裝

通過 pip 安裝 Beautiful Soup 模塊:pip install beautifulsoup4 。

還可以使用 PyCharm IDE 來寫代碼,在 PyCharm 中的 Preferences 中找到 Project ,在里面搜索 Beautiful Soup 模塊,進行安裝即可。

創(chuàng)建 BeautifulSoup 對象

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

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

Beautiful Soup 總共有如下三種對象:

  1. BeautifulSoup
  2. Tag
  3. NavigableString

創(chuàng)建 BeautifulSoup 對象

創(chuàng)建一個 BeautifulSoup 對象是任何 Beautiful Soup 工程的起點。

BeautifulSoup 可以通過傳一個字符串或者類文件對象(file-like object),例如機器上的文件或者網(wǎng)頁。

通過字符串創(chuàng)建 BeautifulSoup 對象

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

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

通過類文件對象創(chuàng)建 BeautifulSoup 對象

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

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

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

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

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

Beautiful Soup 模塊同樣能夠用來解析 XML 。

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

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

理解 features 參數(shù)

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

  1. lxml
  2. html5lib
  3. html.parser

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

當前,每一個 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 將會選擇最合適的 TreeBuilder 類。如果在指定對應的解析器時,出現(xiàn)如下的報錯信息,可能就是需要安裝對應的解析器了。

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)先級,就如上表格所示的優(yōu)先級。首先是 lxml ,其次是 html5lib ,最后才是 html.parser 。例如,我們選擇 html 字符串作為 feature 參數(shù),那么如果 lxml 解析器可用,則 Beautiful Soup 模塊將會選擇 LXMLTreeBuilder 。如果 lxml 不可用,則會選擇 根據(jù) html5lib 解析器選擇 HTML5TreeBuilder 。如果在不可用,則會選擇根據(jù) html.parser 選擇 HTMLParserTreeBuilder 了。

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

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

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

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

在創(chuàng)建 Beautiful Soup 對象時,更好的實踐是指定解析器。這是因為,不同的解析器解析的結(jié)果內(nèi)容大不相同,尤其是在我們的 HTML 文檔內(nèi)容非法時,結(jié)果更為明顯。

當我們創(chuàng)建一個 BeautifulSoup 對象時,Tag 和 NavigableString 對象也就創(chuàng)建了。

創(chuàng)建 Tag 對象

我們可以從 BeautifulSoup 對象中得到 Tag 對象,也就是 HTML/XML 中的標簽。

如下 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 的類型是 <class 'bs4.element.Tag'>  。而 soup.a 的結(jié)果就是 HTML 文檔中的第一個 <a> 標簽。
HTML/XML 標簽對象具有名稱和屬性。名稱就是標簽的名字,例如 標簽 <a> 的名稱就是 a 。屬性則是標簽的 class 、id 、style 等。Tag 對象允許我們得到 HTML 標簽的名稱和屬性 。

Tag 對象的名稱

通過 .name 方式得到 Tag 對象的名稱 。

tagname = atag.name
print tagname 

同時也能夠改變 Tag 對象的名稱:

atag.name = 'p'

這樣就將上面 HTML 文檔中的第一個 <a> 標簽名稱換成了 <p> 標簽了。

Tag 對象的屬性

在 HTML 頁面中,標簽可能有不同的屬性,例如 class 、id 、style 等。Tag 對象能夠以字典的形式訪問標簽的屬性。

atag = soup_atag.a
print atag 

也能通過 .attrs 的方式訪問到,這樣會將所有的屬性內(nèi)容都打印出來 :

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

創(chuàng)建 NavigableString 對象

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

我們可以通過 .string 的方式得到標簽的本文內(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)建對象的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 詳解python的函數(shù)遞歸與調(diào)用

    詳解python的函數(shù)遞歸與調(diào)用

    Python中的函數(shù)遞歸是一種函數(shù)調(diào)用自身的編程技術(shù),遞歸可以用來解決問題,特別是那些可以分解為更小、相似子問題的問題,本文將給大家詳細的講解一下python的函數(shù)遞歸與調(diào)用,需要的朋友可以參考下
    2023-10-10
  • Python繪制正余弦函數(shù)圖像的方法

    Python繪制正余弦函數(shù)圖像的方法

    這篇文章主要介紹了Python繪制正余弦函數(shù)圖像的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Django-channels 實現(xiàn)WebSocket實例

    詳解Django-channels 實現(xiàn)WebSocket實例

    這篇文章主要介紹了詳解Django-channels實現(xiàn)WebSocket實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Python爬取求職網(wǎng)requests庫和BeautifulSoup庫使用詳解

    Python爬取求職網(wǎng)requests庫和BeautifulSoup庫使用詳解

    這篇文章主要為大家介紹了Python爬取求職網(wǎng)及其他網(wǎng)頁時requests庫和BeautifulSoup庫的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python Google風格注釋的使用

    Python Google風格注釋的使用

    Google風格注釋是一種Python代碼注釋的標準化格式,它提供了一種規(guī)范的注釋格式,使得代碼更加易讀、易于維護,本文就來介紹一下Google風格注釋的語法和用法,感興趣的可以了解一下
    2023-11-11
  • Mac下Anaconda的安裝和使用教程

    Mac下Anaconda的安裝和使用教程

    這篇文章主要介紹了Mac下Anaconda的安裝和使用教程,非常不錯,具有一定的參考價借鑒價值,需要的朋友可以參考下
    2018-11-11
  • python3實現(xiàn)elasticsearch批量更新數(shù)據(jù)

    python3實現(xiàn)elasticsearch批量更新數(shù)據(jù)

    今天小編就為大家分享一篇python3實現(xiàn)elasticsearch批量更新數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python ValueError: invalid literal for int() with base 10 實用解決方法

    Python ValueError: invalid literal for int() with base 10 實用

    這篇文章主要介紹了Python ValueError: invalid literal for int() with base 10 實用解決方法,本文使用了一個取巧方法解決了這個問題,需要的朋友可以參考下
    2015-06-06
  • Python使用PyAV提取視頻關(guān)鍵幀的實踐

    Python使用PyAV提取視頻關(guān)鍵幀的實踐

    本文主要介紹了Python使用PyAV提取視頻關(guān)鍵幀的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • python如何啟動cmd批處理文件

    python如何啟動cmd批處理文件

    這篇文章主要介紹了python如何啟動cmd批處理文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論