Python中Xpath如何使用-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比豐鎮(zhèn)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式豐鎮(zhèn)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋豐鎮(zhèn)地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

這篇文章主要介紹了Python中Xpath 如何使用,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

xpath速度比較快,是爬蟲在網(wǎng)頁定位中的較優(yōu)選擇,但是很多網(wǎng)頁前端代碼混亂難以定位,而學(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)容對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

標(biāo)題名稱:Python中Xpath如何使用-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://www.muchs.cn/article10/pegdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作電子商務(wù)、營銷型網(wǎng)站建設(shè)、品牌網(wǎng)站制作移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)