浅谈python中的xpath用法

由于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)

猜你喜欢

转载自blog.csdn.net/qq_39138295/article/details/81257382
今日推荐