淺談python中的xpath用法

回憶不說話發表於2018-07-28

由於XPath屬於lxml庫模組,所以首先要安裝庫lxml,可以在命令提示符頁面輸入pip install lxml

xpath 是查詢語言,可以在XML文件中查詢資訊的語言。主要用於在XML文件中通過元素和屬性進行導航來查詢。

xpath的呼叫方法:

from lxml import etree
index_db = """
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>wuliao</title>
        </head>
        <body>
            <ul>
                <li>啤酒</li>
                <li>飲料</li>
                <li>礦泉水</li>
                <li>                                 
                    <a href="http://www.baidu.com">百度</a>
                </li>
                <li>
                    <a id="yx" class="shopping" href="https://rpic.douyucdn.cn/asrpic/180727/5096323_2105.jpg">遊戲</a>
                </li>
                <li>
                    <a class="shopping" href="https://rpic.douyucdn.cn/asrpic/180727/3857053_2109.jpg">youxi</a>
                </li>
            </ul>
            <p class="first">first_people</p>
            <p class="first" id="one">
                <span>hello world</span>
            </p>
            <p class="first sencond" id="two">sencond class</p>
            <div class="now">
                first_div_element
                <p class="third">fourth</p>
                <a href="https://www.meishij.net">meishijie</a>
            </div>
        </body>
        </html>
        """
code=etree.HTML(index_db)
print(code)
注意,這裡的code輸出的是一個節點。
result = etree.tostring(code)
print(result)

etree.tostring則可以補全全部的標籤。

xpath的使用基本語法:

1.// 從根節點開始,查詢物件是全文。

2./  從當前標籤的路徑開始查詢

3.text()獲取當前路徑下的文字

4.@+類名或者id名 查詢類名或者id的名字

5.  .一個點表示當前節點

(1)獲取某個標籤的內容

a = code.xpath('//a')
print(a)
for x in a :
    print(x.text)

輸出結果:

[<Element a at 0x3046f80>, <Element a at 0x33f0b20>, <Element a at 0x33fe788>, <Element a at 0x33fe828>]
百度
遊戲
youxi
meishijie

a 標籤輸出的是節點。

(2)根據標籤屬性來查詢指定的標籤,獲取指定標籤的屬性

result = code.xpath('//a/@class')
print(result)
result = code.xpath('//a/@id')
print(result)
result = code.xpath('//a/@href')
print(result)

(3)找指定的文字內容

result = code.xpath('//a//text()')
print(result)
注意:/text()是隻找div標籤中的文字,如果div中還有別的子標籤,也有文字的話,是不找的。
result = code.xpath('//div/text()')
print(result)
//text()可以找到本標籤以及所有子標籤的文字
result = code.xpath('//div//text()')
print(result)

(4)獲取指定id名字的標籤的文字

result = code.xpath('//ul/li/a[@id="yx"]/text()')
print(result)

(5)獲取指定類名的文字

result = code.xpath('//a[@class="shopping"]/text()')
print(result)

(6)contains包含指定屬性

result = code.xpath('//div[@class="now"]/p[contains(@class,"third")]/text()')
print(result)

 

 

 

 

 

 

 

 

 

 

相關文章