Beautiful Soup庫也稱爲beautiful4庫、bs4庫,它可用於解析HTML/XML,並將全部文件、字符串轉換爲'utf-8'編碼。HTML/XML文檔是與「標籤樹一一對應的。具體地說,Beautiful Soup庫是能夠解析、遍歷、維護HTML/XML文件的「標籤樹」的功能庫。本文總結了BeautifulSoup的基本使用方法。html
庫的比較常見的引用方式以下html5
from bs4 import BeautifulSoup #從Beautiful Soup庫引入BeautifulSoup類
import bs4 #直接引入Beautiful Soup庫
Beautiful Soup庫可用的解析器有如下4種:python
BeautifulSoup類對應一個HTML/XML文檔的所有內容,其5種基本元素羅列以下:python爬蟲
下面一段運行實例,其中demo是一段HTML代碼框架
咱們看一下a標籤,其父標籤以及祖父標籤的名字學習
接下來,解析a標籤的屬性網站
從中能夠看到,屬性是字典類型。編碼
再看一看標籤自己的類型spa
標籤的NavigableString元素3d
獲取標籤的Comment(與獲取NavigableString比較)
p標籤包含b標籤,然而p.string並不包含b標籤,這說明NavigableString是能夠跨越多個標籤層次的。
前面提到,HTML文檔其實就是一棵標籤樹。對HTML的遍歷便是對標籤樹的遍歷。遍歷的方式分爲上行遍歷、下行遍歷和平行遍歷。
標籤樹的下行遍歷包含三個屬性
使用.contents獲取子節點列表的示例以下
通常地,若是要遍歷子節點,能夠用以下代碼框架
for child in soup.body.children: print(child)
若是要遍歷子孫節點,則能夠用以下代碼框架
for child in soup.body.descendents: print(child)
上行遍歷包含的屬性羅列以下:
下面是使用.parent獲取父標籤的一段實例
這裏看到,html是最高級的標籤,所以其父標籤即爲本身。
通常地,對標籤樹進行上行遍歷,可採用以下代碼框架
for parent in soup.a.parents: if parent is None: print(parent) else: print(parent.name)
相應給出一段運行實例:打印全部先輩標籤的名字
Beautiful Soup庫提供如下四種平行遍歷屬性:
值得注意的是,平行遍歷是在同一個父節點下創建的。
一段運行實例
最後,soup.a.previous_sibling.previous_sibling沒有輸出,說明a標籤的前一個再前一個節點標籤爲空。
通常地,標籤樹的平行遍歷可採用以下代碼框架
for sibling in soup.a.next_siblings: #遍歷後續節點 print(sibling)
for sibling in soup.a.previous_siblings: #遍歷前續節點 print(sibling)
bs4庫提供了prettify()方法,用於對HTML的內容給出更友好的輸出。
下面是一段運行實例
看到pretiffy()在每一個標籤後添加了換行符'\n'。將相關信息打印出來,獲得以下結果
prettify()也能夠對某一個標籤進行處理,示例以下
相關內容爲筆者根據中國大學MOOC網站嵩天教授的python爬蟲課程所撰寫的學習筆記,感謝中國MOOC學習平臺提供的學習資源與嵩老師的授課。