官术网_书友最值得收藏!

2.5 lxml庫和BeautifulSoup庫的安裝及使用

2.5.1 lxml庫概述

lxml庫的解析功能非常強(qiáng)大,效率非常高。lxml解析庫的獨(dú)特之處在于,它結(jié)合了很多其他類似庫的運(yùn)行速度、XML功能完整性與本機(jī)Python API的簡單性,主要是兼容性優(yōu)于著名的ElementTree API。因此,lxml解析庫在Python中使用得非常廣泛。

2.5.2 BeautifulSoup庫概述

HTML網(wǎng)頁數(shù)據(jù)包含各種標(biāo)簽、類和屬性,并且還具有很好的層級關(guān)系。如何高效、準(zhǔn)確地獲取某個節(jié)點(diǎn),是需要重點(diǎn)考慮的問題。BeautifulSoup是一個非常好的解析庫。它可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。它能夠非常容易地通過網(wǎng)頁結(jié)構(gòu)和屬性提取特定的網(wǎng)頁內(nèi)容,并且提供基于Python的函數(shù)和自動轉(zhuǎn)換編碼方式,還能通過友好的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航、查找、修改方式。它位于一個HTML或XML解析器之上,為迭代、搜索和修改解析樹提供Python特有風(fēng)格的操作。

2.5.3 lxml庫和BeautifulSoup庫的安裝

前面使用requests庫的方法抓取了百度的頁面數(shù)據(jù)?,F(xiàn)在需要使用lxml和BeautifulSoup解析庫有針對性地提取需要的數(shù)據(jù)。

1.lxml庫的安裝

可參照第2.4.2節(jié)requests庫的安裝步驟安裝lxml工具包,關(guān)鍵步驟如圖2-13所示。

圖2-13 lxml庫的安裝

2.BeautifulSoup庫的安裝

在安裝BeautifulSoup庫之前,請確保已經(jīng)成功安裝了lxml庫??蓞⒄盏?.4.2節(jié)requests庫的安裝步驟安裝BeautifulSoup庫,關(guān)鍵步驟如圖2-14所示。

圖2-14 BeautifulSoup庫的安裝

2.5.4 lxml庫和BeautifulSoup庫的基本用法

1.使用BeautifulSoup讀取指定HTML文件或文檔對象模型

在導(dǎo)入了BeautifulSoup庫之后,就可以使用其open()方法,通過傳入指定的HTML文件獲得文檔對象。同時,這里也可以直接使用BeautifulSoup類通過傳入文檔對象標(biāo)簽直接初始化。如果沒有指定解析庫的話,系統(tǒng)會默認(rèn)使用lxml庫。

2.BeautifulSoup的tag對象是與其一一對應(yīng)的

tag對象有很多方法和屬性,其中最重要的屬性有name、attributes和string。

1)name屬性表示該標(biāo)簽指向的標(biāo)簽類型。

2)attributes屬性表示該標(biāo)簽當(dāng)中所指向的特定的屬性值。

3)string屬性表示該標(biāo)簽中顯示的文本內(nèi)容。

3.使用文檔節(jié)點(diǎn)樹遍歷和查詢文檔對象

操作文檔樹最簡單的方法就是告訴它希望獲取的tag的name,如果想獲?。紁>標(biāo)簽,只要用soup.p即可。

輸出結(jié)果如下。

BeautifulSoup還可以實(shí)現(xiàn)更多復(fù)雜的針對文檔節(jié)點(diǎn)的操作,包括contents、children、parents、next_sibling和previous_sibling等。

contents屬性可以將tag的子節(jié)點(diǎn)以列表的形式輸出。

輸出結(jié)果如下。

children生成器可以對tag的子節(jié)點(diǎn)進(jìn)行循環(huán)。

輸出結(jié)果如下。

parent屬性可以獲取某個元素的父節(jié)點(diǎn)。

輸出結(jié)果如下。

next_sibling和previous_sibling屬性可以查詢兄弟節(jié)點(diǎn)。

輸出結(jié)果如下。

主站蜘蛛池模板: 亚东县| 阿拉善左旗| 虞城县| 泰宁县| 隆德县| 平顶山市| 黑龙江省| 内乡县| 尤溪县| 专栏| 灌阳县| 沁阳市| 余姚市| 高雄县| 泸溪县| 博客| 齐河县| 吉木萨尔县| 黎川县| 长乐市| 石泉县| 玉环县| 大方县| 城市| 昌乐县| 类乌齐县| 龙泉市| 德安县| 镇远县| 婺源县| 郸城县| 遂宁市| 锡林浩特市| 潮州市| 金昌市| 延川县| 托里县| 罗城| 博野县| 文化| 双牌县|