国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python利用Beautiful Soup模塊創建對象詳解

2019-11-25 16:17:06
字體:
來源:轉載
供稿:網友

安裝

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

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

創建 BeautifulSoup 對象

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

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

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

  1. BeautifulSoup
  2. Tag
  3. NavigableString

創建 BeautifulSoup 對象

創建一個 BeautifulSoup 對象是任何 Beautiful Soup 工程的起點。

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

通過字符串創建 BeautifulSoup 對象

在 BeautifulSoup 的構造器中通過傳遞一個字符串來創建對象。

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

通過類文件對象創建 BeautifulSoup 對象

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

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 解析創建 BeautifulSoup 對象

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

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

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

理解 features 參數

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

  1. lxml
  2. html5lib
  3. html.parser

BeautifulSoup 構造器的 features 參數能夠接受一個字符串列表或一個字符串值。

當前,每一個 TreeBuilder 支持的 features 參數和解析器如下表所示:

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

根據指定的 feature 參數,Beautiful Soup 將會選擇最合適的 TreeBuilder 類。如果在指定對應的解析器時,出現如下的報錯信息,可能就是需要安裝對應的解析器了。

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

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

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

所以,為 XML 創建一個 Beautiful Soup 對象的代碼如下:

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

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

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

當我們創建一個 BeautifulSoup 對象時,Tag 和 NavigableString 對象也就創建了。

創建 Tag 對象

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

如下 HTML 代碼所示:

#!/usr/bin/python# -*- coding:utf-8 -*-from bs4 import BeautifulSouphtml_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.aprint 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.nameprint tagname 

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

atag.name = 'p'

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

Tag 對象的屬性

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

atag = soup_atag.aprint atag 

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

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

創建 NavigableString 對象

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

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

navi = atag.stringprint 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模塊創建對象的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博兴县| 新平| 景德镇市| 若羌县| 乐东| 固原市| 吉安县| 青海省| 通化市| 宁海县| 新绛县| 奇台县| 三门峡市| 桓台县| 彭阳县| 沙洋县| 大厂| 莱芜市| 巴里| 区。| 永丰县| 赤水市| 岳阳市| 碌曲县| 观塘区| 敖汉旗| 嵊州市| 平度市| 卢湾区| 科技| 宣化县| 拉萨市| 楚雄市| 绥宁县| 金平| 兴隆县| 濮阳县| 策勒县| 巨野县| 兰州市| 巨鹿县|