Beautiful Soup庫的使用(學習筆記)

MaR_0205發表於2020-12-23

Beautiful Soup庫的簡介

BeautifulSoup庫是解析、遍歷、維護“標籤樹”的功能庫。
可以說BeautifulSoup類對應一個HTML/XML文件的全部內容。

Beautiful Soup庫安裝

只需執行:pip install beautifulsoup4
在這裡插入圖片描述
小測試:
1.先用爬蟲爬下來一個網頁:

import requests
r = requests.get("http://python123.io/ws/demo.html")
r.text

在這裡插入圖片描述
2. 將網頁的內容作為引數傳給demo

demo = r.text
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")  #html.parser是HTML解析器,用來解析demo
print(soup.prettify())  #列印出來,檢視解析是否正確

在這裡插入圖片描述
安裝成功!

BeautifulSoup庫的使用:(注意大小寫)

from bs4 import BeautifulSoup  #引用BeautifulSoup庫
soup = BeautifulSoup('<p> data</p>','html.parser')
soup2 = BeautifulSoup(open("D://demo.html"),"html.parser")#通過開啟檔案的方式

BeautifulSoup庫的基本元素

Beautiful Soup庫解析器
在這裡插入圖片描述
在這裡插入圖片描述

其實哪種解析器都可以有效解析HTML和xml
基本元素
在這裡插入圖片描述

獲得Tag標籤的基本方法

  1. 獲得HTML中標籤裡的內容:soup.title
    或者通過:tag = soup.title 然後 tag
    效果一樣
    在這裡插入圖片描述
    要以字串的形式輸出標籤裡的內容則:soup.title.string
    在這裡插入圖片描述
  2. 獲取標籤的名字:soup.a.name
    獲取標籤父親標籤的名字: soup.a.parent.name
    在這裡插入圖片描述
  3. 獲得標籤的屬性:tag = soup.a
    後再 tag.attrs 結果以字典的方式輸出
    在這裡插入圖片描述
  4. 檢視型別用:type(soup.p.string)
    在這裡插入圖片描述
    見圖,soup.p.string列印出來的內容並不包含p中的標籤的內容,由此可知 NavigableString 是可以跨越多個標籤層次的。
  5. 用type可以判斷出來是否是Comment型別,因為列印時候註釋內容也是正常列印出來的。

基於bs4庫的HTML內容的遍歷方式

標籤樹的下行遍歷
在這裡插入圖片描述
用法例如:soup.head.contents
在這裡插入圖片描述
標籤的兒子還包括字串節點如\n

len(soup.body.contents) 獲得body兒子節點的數量
soup.body.contents[1] 檢視其第一個兒子
在這裡插入圖片描述
遍歷兒子節點:for child in soup.body.children:
print(child)
遍歷孫子節點:for child in soup.body.children:
print(child)

上行遍歷:會遍歷到soup本身
在這裡插入圖片描述
用法例如看title標籤的父親標籤:soup.title.parent
標籤html的父親標籤就是它自己
soup是一個特殊的標籤,父親是空的。
一個上行遍歷程式碼:

soup = BeautifulSoup(demo,"html.parser")

for parent in soup.a.parents:
	if parent is None:#因為會遍歷到soup本身,此時就是None
		print(parent)
	else:
		print(parent.name)

在這裡插入圖片描述

平行遍歷
在這裡插入圖片描述
必須發生在同一個父親節點下的各個節點之間,否則不構成平行遍歷關係,還有NavigableString型別
在這裡插入圖片描述
在這裡插入圖片描述
遍歷後續節點:

for sibling in soup.a.next_siblings:
    print(sibling)

遍歷前續節點:

for sibling in soup.a.previous_siblings:
    print(sibling)

基於bs4庫的HTML格式化

如何讓HTML更加“友好”的顯示?
用的是 bs4庫的 prettify()方法,能夠對文字加換行符
在這裡插入圖片描述

*注:文章圖片來字mooc課件截圖

相關文章