Python爬蟲必備之Xpath簡介及實(shí)例講解
前言
網(wǎng)上已經(jīng)有很多大佬發(fā)過Xpath,而且講的都很好,我是因?yàn)閯傞_始學(xué)習(xí)網(wǎng)絡(luò)爬蟲,對這些基礎(chǔ)重要知識不太了解,所以寫一下來加深印象,本篇文章只是簡單介紹一下Xpath及使用,總體來說比較基礎(chǔ)。
一、Xpath簡介
XPath(XML Path Language - XML路徑語言),它是一種用來確定XML文檔中某部分位置的語言。
Xpath以XML為基礎(chǔ),提供用戶在數(shù)據(jù)結(jié)構(gòu)樹中尋找節(jié)點(diǎn)的能力,Xpath被很多開發(fā)者親切的稱為小型查詢語言。
二、Xpath語法規(guī)則
xpath可以使用路徑表達(dá)式在XML上選取節(jié)點(diǎn),從而達(dá)到確認(rèn)元素的目的,我們先來介紹以下語法規(guī)則。
語法規(guī)則
表達(dá)式 | 作用 |
---|---|
nodename | 選取此層級節(jié)點(diǎn)下的所有子節(jié)點(diǎn) |
/ | 代表從根節(jié)點(diǎn)進(jìn)行選取 |
// | 可以理解為匹配,就是在所有節(jié)點(diǎn)中選取此節(jié)點(diǎn),直到匹配為止 |
. | 選取當(dāng)前節(jié)點(diǎn) |
… | 選取當(dāng)前節(jié)點(diǎn)上一層(上一級目錄) |
@ | 選取屬性(也是匹配) |
標(biāo)簽定位
方式 | 效果 |
---|---|
/html/body/div | 表示從根節(jié)點(diǎn)開始尋找,標(biāo)簽與標(biāo)簽之間/表示一個(gè)層級 |
/html//div | 表示多個(gè)層級 作用于兩個(gè)標(biāo)簽之間(也可以理解為在html下進(jìn)行匹配尋找標(biāo)簽div) |
//div | 從任意節(jié)點(diǎn)開始尋找,也就是查找所有的div標(biāo)簽 |
./div | 表示從當(dāng)前的標(biāo)簽開始尋找div |
屬性定位
需求 | 格式 |
---|---|
定位div中屬性名為href,屬性值為‘www.baidu.com’的div標(biāo)簽 | @屬性名=屬性值 |
href為屬性名 'www.baidu.com’為屬性值 | /html/body/div[href=‘www.baidu.com’] |
索引定位
需求 | 格式 |
---|---|
定位ul下第二個(gè)li標(biāo)簽(下圖) | //ul/li[2] |
索引值開始位置為 | 1 |
取文本內(nèi)容
方法 | 效果 |
---|---|
/text() | 獲取標(biāo)簽下直系的標(biāo)簽內(nèi)容 |
//text() | 獲取標(biāo)簽中所有的文本內(nèi)容 |
string() | 獲取標(biāo)簽中所有的文本內(nèi)容 |
在網(wǎng)頁上獲取Xpath其實(shí)很容易,直接找到標(biāo)簽后,右鍵復(fù)制就好了。
三、語法規(guī)則練習(xí)
接下來我們開始練習(xí)一下本地導(dǎo)入,加深一下理解,這個(gè)是一個(gè)比較簡單的網(wǎng)頁結(jié)構(gòu),我們先學(xué)會(huì)用法即可。
任務(wù)要求: 可以達(dá)到隨心所欲的定位每一個(gè)元素
準(zhǔn)備工作
#導(dǎo)入所需要的包 from lxml import etree #采用本地源碼獲取方式并加載到etree內(nèi) tree = etree.parse('test.html')
1.獲取百度、谷歌、搜狗文本內(nèi)容
#引用xpath方法并進(jìn)行標(biāo)簽定位 #''.join是取字符串內(nèi)的內(nèi)容 text = ' '.join(tree.xpath('/html/body/ul/li/a/text()')) print(text)
2.獲取單個(gè)谷歌
text1 = tree.xpath("http://ul/li[2]/a/text()")[0] print(text1)
3.獲取北京、上海、天津的屬性值
text2 = ' '.join(tree.xpath("http://ol/li/a/@href")) print(text2)
4.獲取河南文本
#獲取河南文本 text3 = tree.xpath("/html/body/div[2]/text()")[0] print(text3)
5.獲取谷歌屬性值
text4 = tree.xpath("http://ul/li[2]/a/@href")[0] print(text4)
至此我們已經(jīng)可以隨心定位任意標(biāo)簽 完成任務(wù) 收工
總結(jié)
到此這篇關(guān)于Python爬蟲必備之Xpath簡介及實(shí)例的文章就介紹到這了,更多相關(guān)Python爬蟲Xpath實(shí)例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼(自動(dòng)腳本)
這篇文章主要介紹了用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Python使用redis pool的一種單例實(shí)現(xiàn)方式
這篇文章主要介紹了Python使用redis pool的一種單例實(shí)現(xiàn)方式,結(jié)合實(shí)例形式分析了Python操作redis模塊實(shí)現(xiàn)共享同一個(gè)連接池的相關(guān)技巧,需要的朋友可以參考下2016-04-04詳解Python如何查看一個(gè)函數(shù)的參數(shù)
inspect模塊提供了許多用于檢查對象的工具函數(shù),其中包括用于獲取函數(shù)參數(shù)信息的函數(shù),所以在Python中,大家可以使用inspect模塊來查看一個(gè)函數(shù)的參數(shù)信息,本文就來和大家講講具體操作吧2023-05-05