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

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

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

安裝

通過 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)頁中的所有鏈接或者標簽內的內容。

為了實現(xiàn)這一點,Beautiful Soup 提供了不同的對象和方法。任何的 HTML/XML 文檔能夠轉化成不同的 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 的構造器中通過傳遞一個字符串來創(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 的構造器中通過傳遞一個類文件對象(file-like object)來創(chuàng)建對象。這在解析在線網(wǎng)頁時非常有用。

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

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

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 解析器,產生一個 HTML 結構樹。在上面的代碼中,由字符串生成 BeautifulSoup 對象,就是將它解析成了 HTML 樹結構。

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

理解 features 參數(shù)

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

  1. lxml
  2. html5lib
  3. html.parser

BeautifulSoup 構造器的 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

輸入的結果也是 XML 形式的文件 :

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

當我們創(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

從結果中可以看到 atag 的類型是 <class 'bs4.element.Tag'>  。而 soup.a 的結果就是 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 的方式訪問到,這樣會將所有的屬性內容都打印出來 :

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

創(chuàng)建 NavigableString 對象

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

我們可以通過 .string 的方式得到標簽的本文內容 。

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

小結

代碼小結如下:

BeautifulSoup

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

Tag

  • tag = soup.tag
  • tag.name
  • tag[‘attribute']

NavigableString

  • soup.tag.string

總結

以上就是關于Python使用Beautiful Soup模塊創(chuàng)建對象的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關文章

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

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

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

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

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

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

    這篇文章主要介紹了基于python代碼批量處理圖片resize,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python自動化測試之setUp與tearDown實例

    python自動化測試之setUp與tearDown實例

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

    python plotly畫柱狀圖代碼實例

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

    PyQt5 closeEvent關閉事件退出提示框原理解析

    這篇文章主要介紹了PyQt5 closeEvent關閉事件退出提示框原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Python中標準庫OS的常用方法總結大全

    Python中標準庫OS的常用方法總結大全

    python中的OS庫提供了使用各種操作系統(tǒng)功能的接口。是經常用到的一個庫,所以這篇文章主要給大家總結介紹了關于Python中標準庫OS的常用方法,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Pytest+Allure使用示例教程

    Pytest+Allure使用示例教程

    Allure是開源的免費的自動化測試報告,支持Java,Python,我們來看看如何使用Python pytest與Allure整合,輸出漂亮的測試報告,這篇文章主要介紹了Pytest+Allure使用教程,需要的朋友可以參考下
    2023-12-12
  • Python科學畫圖代碼分享

    Python科學畫圖代碼分享

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

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

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

最新評論

宁津县| 泸定县| 莲花县| 永德县| 佳木斯市| 互助| 余江县| 赣州市| 鲁山县| 增城市| 武乡县| 武夷山市| 新河县| 夏河县| 德州市| 漾濞| 如东县| 开封市| 图木舒克市| 怀柔区| 阿尔山市| 江都市| 彩票| 通辽市| 深水埗区| 古浪县| 安宁市| 隆回县| 伊通| 政和县| 山东| 长阳| 仙桃市| 松溪县| 蕲春县| 和平县| 宝坻区| 青铜峡市| 贺州市| 城市| 梓潼县|