有同學(xué)說(shuō),我正則用的不好,處理HTML文檔很累,有沒(méi)有其他的方法?
有!那就是XPath,我們可以用先將HTML文檔轉換成XML文檔,然后用XPath查找HTML節點(diǎn)或元素。
XML文檔實(shí)例
HTML DOM模型示例
HTML DOM定義了訪(fǎng)問(wèn)和操作HTML文檔的標準方法,以樹(shù)結構方式表達了HTML文檔。
XML的節點(diǎn)關(guān)系
1.父(Parent)
每個(gè)元素以及屬性都有一個(gè)父。
下面是一個(gè)簡(jiǎn)單的XML例子中,book元素時(shí)title、author、year以及price
4.先輩(Ancestor)
某節點(diǎn)的父、父的父,等等。
在下面的例子中,title元素的先輩是book元素和bookstore元素:小編推薦大家加一下這個(gè)群:103456743這個(gè)群里好幾千人了!大家遇到啥問(wèn)題都會(huì )在里面交流!而且免費分享零基礎入門(mén)料資料web開(kāi)發(fā) 爬蟲(chóng)資料一整套!是個(gè)非常好的學(xué)習交流地方!也有程序員大神給大家熱心解答各種問(wèn)題!很快滿(mǎn)員了。欲進(jìn)從速哦!各種PDF等你來(lái)下載!全部都是免費的哦!只為幫助大家快速入門(mén),所以小編在群里等你們過(guò)來(lái)一起交流學(xué)習呢!
XPath 開(kāi)發(fā)工具
開(kāi)源的XPath表達式編輯工具:XML Quire(XML格式文件可用)
Chrome插件Xpath Helper
Firefox插件Xpath Checker
選取節點(diǎn)
XPath使用路徑表達式來(lái)選取XML文檔中的節點(diǎn)或者節點(diǎn)集。這些路徑表達式和我們常規的電腦文件系統中看到的表達式非常相似。
下面列出了最常用的路徑表達式:
| 表達式 | 描述 |
|---|---|
| nodename | 選取此節點(diǎn)的所有子節點(diǎn) |
| / | 從根節點(diǎn)選取 |
| // | 從匹配選擇的當前節點(diǎn)選擇文檔中的節點(diǎn),而不考慮它們的位置。 |
| . | 選取當前節點(diǎn)。 |
| .. | 選取當前節點(diǎn)的父節點(diǎn) |
| @ | 選取屬性 |
在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:
| 路徑表達式 | 描述 |
|---|---|
| bookstore | 選取bookstore元素的所有子節點(diǎn)。 |
| /bookstore | 選取根元素 bookstore。注釋?zhuān)杭偃缏窂狡鹗加谡备? / ),則此路徑始終代表到某元素的絕對路徑! |
| bookstore/book | 選取屬于bookstore的子元素的所有book元素 |
| //book | 選取所有book子元素,而不管它們在文檔中的位置 |
| bookstore//book | 選擇屬于bookstore元素的后代的所有bok元素,而不管它們位于bookstore之下的什么位置 |
| //@lang | 選取名為lang的所有屬性。 |
謂語(yǔ)(Predicates)
謂語(yǔ)用來(lái)查找某個(gè)特定的節點(diǎn)或者包含某個(gè)特定的值的節點(diǎn),被嵌在方括號中。
在下面的表格中,我們列出了帶有謂語(yǔ)的一些路徑表達式,以及表達式的結果:
| 路徑表達式 | 結果 |
|---|---|
| /bookstore/book[1] | 選取屬于bookstore子元素的第一個(gè)book元素。 |
| /bookstore/book[last()] | 選取數據bookstore子元素的最后一個(gè)book元素 |
| /bookstore/book[last()-1] | 選取屬于bookstore元素的倒數第二個(gè)book元素 |
| /bookstore/book[position()<> | 選取最前面的兩個(gè)屬于bookstore元素的子元素book元素 |
| //title[@lang] | 選取所有擁有名為lang的屬性的title元素 |
| //title[@lang='eng'] | 選取所有title元素,且這些元素擁有值為eng的lang屬性 |
| /bookstore/book[price>35.00] | 選取所有bookstore元素的book元素,且其中的price元素的值必須大于35.00 |
| /bookstore/book[price>35.00]/title | 選取bookstore元素中的book元素的所有title元素,且其中的price元素的值必須大于35.00 |
選取未知節點(diǎn)
XPath通配符可用來(lái)選取未知的XML元素。
| 通配符 | 描述 |
|---|---|
| * | 匹配任何元素節點(diǎn) |
| @* | 匹配任何屬性節點(diǎn) |
| node() | 匹配任何類(lèi)型的節點(diǎn) |
在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:
| 路徑表達式 | 結果 |
|---|---|
| /bookstore/* | 選取bookstore元素的所有子元素 |
| //* | 選取文檔中的所有元素 |
| title[@*] | 選取所有帶屬性的title元素 |
選取若干路徑
通過(guò)在路徑表達式中使用'|'運算符,您可以選取若干個(gè)路勁。
實(shí)例
在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:
| 路徑表達式 | 結果 |
|---|---|
| '//book/title | //book/price' | 選取book元素的所有title和price元素。 |
| //title | //price | 選取文檔中的所有title和price元素 |
| /bookstore/book/title | //price | 選取屬于bookstore元素的book元素的title元素,以及文檔中的所有price元素 |
XPath的運算符



文件讀?。?/p>
除了直接讀取字符串,lxml還支持從文件里讀取內容。我們新建一個(gè)hello.html文檔:

XPath實(shí)例測試
1.獲取所有的標簽



7.獲取倒數第二個(gè)元素的內容

謝謝閱讀!

如有侵權請聯(lián)系小編刪除哦!
聯(lián)系客服