您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python中Xpath 如何使用,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
xpath速度比較快,是爬蟲在網(wǎng)頁(yè)定位中的較優(yōu)選擇,但是很多網(wǎng)頁(yè)前端代碼混亂難以定位,而學(xué)習(xí)定位也較為不易,這里列出一點(diǎn)編程過程中可能有用的東西。
試驗(yàn)環(huán)境:Python環(huán)境,lxml.etree
試驗(yàn)所使用的html代碼
<!DOCTYPE html> <html> <head> <title>xpath test</title> </head> <body> <div price="99.8"> <div> <ul> <li>時(shí)間</li> <li>地點(diǎn)</li> <li>任務(wù)</li> </ul> </div> <div id='testid' data-h="first"> <h3>這里是個(gè)小標(biāo)題</h3> <ol> <li data="one">1</li> <li data="two">2</li> <li data="three">3</li> </ol> <ul> <li code="84">84</li> <li code="104">104</li> <li code="223">223</li> </ul> </div> <div> <h4>這里是H3的內(nèi)容 <a href="http://www.baidu.com">百度一下</a> <ul> <li>test1</li> <li>test2</li> </ul> </h4> </div> <div id="go"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div> </div> </body> </html>
1、匹配某節(jié)點(diǎn)下的所有.//
//獲取文檔中所有匹配的節(jié)點(diǎn),.獲取當(dāng)前節(jié)點(diǎn),有的時(shí)候我們需要獲取當(dāng)前節(jié)點(diǎn)下的所有節(jié)點(diǎn),.//一定要結(jié)合.使用//,否則都會(huì)獲取整個(gè)文檔的匹配結(jié)果.
2、匹配包含某屬性的所有的屬性值//@lang
print tree.xpath('//@code') #匹配所有帶有code屬性的屬性值 >>['84', '104', '223']
3、選取若干路徑|
這個(gè)符號(hào)用于在一個(gè)xpath中寫多個(gè)表達(dá)式用,用|分開,每個(gè)表達(dá)式互不干擾
print tree.xpath('//div[@id="testid"]/h3/text() | //li[@data]/text()') #多個(gè)匹配條件 >>[u'\u8fd9\u91cc\u662f\u4e2a\u5c0f\u6807\u9898', '1', '2', '3']
4、 Axes(軸)
child:選取當(dāng)前節(jié)點(diǎn)的所有子元素
>>print tree.xpath('//div[@id="testid"]/child::ul/li/text()') #child子節(jié)點(diǎn)定位 >>['84', '104', '223'] >>print tree.xpath('//div[@id="testid"]/child::*') #child::*當(dāng)前節(jié)點(diǎn)的所有子元素 >>[<Element h3 at 0x21bd148>, <Element ol at 0x21bd108>, <Element ul at 0x21bd0c8>] >>#定位某節(jié)點(diǎn)下為ol的子節(jié)點(diǎn)下的所有節(jié)點(diǎn) >>print tree.xpath('//div[@id="testid"]/child::ol/child::*/text()') >>['1', '2', '3']
attribute:選取當(dāng)前節(jié)點(diǎn)的所有屬性
>>print tree.xpath('//div/attribute::id') #attribute定位id屬性值 >>['testid', 'go'] >>print tree.xpath('//div[@id="testid"]/attribute::*') #定位當(dāng)前節(jié)點(diǎn)的所有屬性 >>['testid', 'first']
ancestor:父輩元素 / ancestor-or-self:父輩元素及當(dāng)前元素
>>print tree.xpath('//div[@id="testid"]/ancestor::div/@price') #定位父輩div元素的price屬性 >>['99.8'] >>print tree.xpath('//div[@id="testid"]/ancestor::div') #所有父輩div元素 >>print tree.xpath('//div[@id="testid"]/ancestor-or-self::div') #所有父輩及當(dāng)前節(jié)點(diǎn)div元素 >>[<Element div at 0x23fc108>] >>[<Element div at 0x23fc108>, <Element div at 0x23fc0c8>]
following :選取文檔中當(dāng)前節(jié)點(diǎn)的結(jié)束標(biāo)簽之后的所有節(jié)點(diǎn)
#定位testid之后不包含id屬性的div標(biāo)簽下所有的li中第一個(gè)li的text屬性 >>print tree.xpath('//div[@id="testid"]/following::div[not(@id)]/.//li[1]/text()') >>['test1']
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python中Xpath 如何使用內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。