python爬蟲-Beautiful Soup庫入門(四)

說明

Beautiful Soup庫是一個HTML/XML的解析器,主要的功能是解析和提取 HTML/XML數據。

Beautiful Soup庫安裝

打開命令行使用pip安裝Beautiful Soup第三方庫

pip install beautifulsoup4

Beautiful Soup庫的引用

安裝時的名字是beautifulsoup4,但在python中引用這個庫的名字是bs4,其中BeautifulSoup類是最經常用的

from bs4 import BeautifulSoup
import bs4 

Beautiful Soup庫解析器

python對大小寫比較敏感
BeautifulSoup對應一個HTML/XML文檔的全部內容

soup = BeautifulSoup("<html >data< /html>", "html.parser")
解釋器 使用方法 條件
bs4的HTML解析器 BeautifulSoup( mk, ‘html.parser’) pip install beautifulsoup4
lxml的HTML解析器 BeautifulSoup(mk, ‘lxml’) pip install lxml
lxml的XML解析器 BeautifulSoup(mk, ‘xml’ ) pip install lxml
html5lib的解析器 BeautifulSoup( mk, ‘html5lib’) pip install html5lib

Beautiful Soup類的基本元素

例子

以下例子都由w3school源代碼爲例子

在這裏插入圖片描述

tag標籤

任何存在於HTML語法中的標籤都可以用soup.<tag>訪問獲得
當HTML文檔中存在多個相同<tag>對應內容時,soup.<tag>返回第一個

基本元素 說明
Tag 標籤,最基本的信息組織單元,分別用<>和</ >標明開頭和結尾

在這裏插入圖片描述

tag的name(名字)

每個<tag>都有自己的名字,通過<tag>.name獲取,字符串類型
還可以通過parent獲取當前標籤的父標籤

基本元素 說明
Name 標籤的名字,<p>…</p>的名字是’p‘,格式:<tag>.name

在這裏插入圖片描述

tag的Attributes(屬性)

一個<tag>可以有0或多個屬性,字典類型

基本元素 說明
Attributes 標籤的屬性,字典形式組織,格式:<tag>.attrs

在這裏插入圖片描述

Tag的NavigableString(內容)

NavigableString可以跨越多個層次

基本元素 說明
NavigableString 標籤內非屬性字符串,<>…</ >中字符串,格式:<tag>.string

在這裏插入圖片描述

Tag的Comment(註釋)

Comment是一種特殊類型

基本元素 說明
Comment 標籤內字符串的註釋部分,一種特殊的Comment類型

在這裏插入圖片描述
在這裏插入圖片描述

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

HTML的遍歷一共三種方法:下行遍歷、上行遍歷、平行遍歷
HTML基本格式:< >…</ >構成了所屬關係,形成了標籤的樹形結構

在這裏插入圖片描述

下行遍歷

BeautifulSoup類型是標籤樹的根節點

屬性 說明
.contents 子節點的列表,將<tag>所有兒子節點存入列表
.children 子節點的迭代類型,與.contents類似,用於循環遍歷兒子節點
.descendants 子孫節點的迭代類型,包含所有子孫節點,用於循環遍歷

使用時他會自動在每個標籤後面加一個換行符,第二個命令就是輸出行數,實際代碼行數爲37減去第一行的換行除以二實際一共18行代碼
使用contents屬性將本標籤內的所有代碼存入列表,可以控制輸出哪一行

在這裏插入圖片描述

遍歷兒子節點

for child in soup.body.children:
    print(child)

遍歷子孫節點

for child in soup.body.descendants:
    print(child)

上行遍歷

屬性 說明
.parent 節點的父親標籤
.parents 節點先輩標籤的迭代類型,用於循環遍歷先輩節點

下邊的“h1”取整個網頁第一個“h1”,使用parent屬性就是“h1”的父親標籤包含的所有內容,第二行代碼的soup本身等級就已經是最大的(整個html文件),他的父親就是個空

在這裏插入圖片描述

使用parents屬性遍歷HTML中一個標籤的父標籤的名字,其中需要判斷父標籤是否爲空,當爲空時結束

for parent in soup.li.parents:
	if parent is None:
		print(parent)
	else:
		print(parent.name)

在這裏插入圖片描述

平行遍歷

屬性 說明
.next_sibling 返回按照HTML文本順序的下一個平行節點標籤
.previous_sibling 返回按照HTML文本順序的上一個平行節點標籤
.next_siblings 迭代類型,返回按照HTML文本順序的後續所有平行節點標籤
.previous_siblings 迭代類型,返回按照HTML文本順序的前續所有平行節點標籤

平行遍歷發生在同一個父節點下的各節點間,下面代碼中由於每個標籤後都很了一個換行符,所以使用一個next_sibling屬性時出現的是換行符,在加一個next_sibling就會顯示本標籤的下一個平行節點標籤
同理previous_sibling屬性返回本標籤的上一個平行標籤也是和上面的說法一樣

在這裏插入圖片描述

遍歷後續節點,next_siblings

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

在這裏插入圖片描述

遍歷前續節點,previous_siblings

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

在這裏插入圖片描述
在這裏插入圖片描述

基於bs4庫的HTML格式輸出

每當我們將整個網頁的代碼顯示出來時,代碼亂七八糟的,都是在一行裏顯示出來全部代碼,下面的代碼還不是多行,由於電腦屏幕問題他給你擠壓到多行

在這裏插入圖片描述

prettify()

我們可以使用prettify()方法將代碼整潔的輸出到屏幕上,使用後每個標籤佔用一行(不是一對標籤),一段文字佔一行,從下圖看原本的130行被搞成了858行…

在這裏插入圖片描述

.prettify( )爲HTML文本<>及其內容增加’\n’
.prettify( )可用於標籤,方法:<tag>.prettify( )

在這裏插入圖片描述

bs4庫的編碼

bs4庫將任何HTML輸入都變成utf-8編碼
Python 3.x默認支持編碼是utf-8,解析無障礙

在這裏插入圖片描述

以上均爲個人學習筆記,如有錯誤請指正,共同學習,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章