數據解析原理
- 標籤定位
- 提取標籤、標籤屬性中存儲的數據值
bs4數據解析的原理:
- 實例化一個BeautifulSoup對象,並且將頁面源碼數據加載到該對象中
- 通過調用BeautifulSoup對象中相關的屬性或者方法進行標籤定位和數據提取
環境安裝:
pip install bs4
pip install lxml
如何實例化BeautifulSoup對象:
from bs4 import BeautifulSoup
1.將本地的html文檔中的數據加載到該對象中
fp = open('./test.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml')
2.將互聯網上獲取的頁面源碼加載到該對象中
page_text = response.text
soup = BeatifulSoup(page_text,'lxml')
提供的用於數據解析的方法和屬性:
-
soup.tagName:返回的是文檔中第一次出現的tagName對應的標籤
-
soup.find():
find(‘tagName’):等同於soup.div
-
屬性定位
soup.find(‘div’,class_/id/attr=‘song’)
soup.find_all(‘tagName’):返回符合要求的所有標籤(列表) -
select:
select(‘某種選擇器(id,class,標籤…選擇器)’),返回的是一個列表。 -
層級選擇器:
soup.select(’.tang > ul > li > a’):>表示的是一個層級
oup.select(’.tang > ul a’):空格表示的多個層級 -
獲取標籤之間的文本數據:
soup.a.text/string/get_text()
text/get_text():可以獲取某一個標籤中所有的文本內容
string:只可以獲取該標籤下面直系的文本內容 -
獲取標籤中屬性值:
soup.a[‘href’]
xpath解析:最常用且最便捷高效的一種解析方式。
xpath解析原理:
- 實例化一個etree的對象,且需要將被解析的頁面源碼數據加載到該對象中。
- 調用etree對象中的xpath方法結合着xpath表達式實現標籤的定位和內容的捕獲。
環境的安裝:
pip install lxml
如何實例化一個etree對象:
from lxml import etree
- 將本地的html文檔中的源碼數據加載到etree對象中:
etree.parse(filePath)
- 可以將從互聯網上獲取的源碼數據加載到該對象中
etree.HTML('page_text')
xpath用法:
- /:表示的是從根節點開始定位。表示的是一個層級。
- //:表示的是多個層級。可以表示從任意位置開始定位。
- 屬性定位://div[@class=‘song’] tag[@attrName=“attrValue”]
- 索引定位://div[@class=“song”]/p[3] 索引是從1開始的。
- 取文本:
/text() 獲取的是標籤中直系的文本內容
//text() 標籤中非直系的文本內容(所有的文本內容) - 取屬性:
/@attrName