xpath

1.概念

chrome安装 xpath helper插件

1)路径选择语法
1.斜杠
从根节点找/
/html/head # 在根节点查询,只有绝对路径的body返回
在所有节点找//:
//head/title/text() # 在当前路径查询head,所有子节点都会返回,这里就不需要指定html了

2.点
相对位置...
//body/… # 先找到body再跳回html

3.@属性和
永远在末尾获得属性和文本

//head/link/@href #去link标签的href属性
4.text()文本
永远在末尾获得属性和文本
//head/title/text() # 取文本内容

2)节点修饰语法
1.通过索引修饰
/html/body/div[3] #选中第3个div,div[last()-1]表示选中最后一个;div[position(start,end)]区间选择
2.通过属性值修饰
/html/body/div[@id=“wang”]

3.通过子节点修饰
span[i>200] # 获得所有span自己元素i的值大于200的span标签
4.包含
//div[contains(@id,“wa”)] # 只要属性部分包含"wa"即可
//div[contains(text(),“wa”)] # 只要内容部分包含"wa"即可

3)通配
//*[@id="wang] # 通配所有符合属性的标签

4)逻辑判断
//td/a|//h2/a # 或 //td/a 或 //h2/a

2.应用


#coding:utf-8
from lxml import etree

text = ''' 
<div> 
    <ul> 
        <li class="item-1">
            <a href="link1.html">first item</a>
        </li> 
        <li class="item-1">
            <a href="link2.html">second item</a>
        </li> 
        <li class="item-inactive">
            <a href="link3.html">third item</a>
        </li> 
        <li class="item-1">
            <a href="link4.html">fourth item</a>
        </li> 
        <li class="item-0">
            <a href="link5.html">fifth item</a> 
    </ul> 
</div> '''

# 将html源码创建成element对象

html = etree.HTML(text)

# etree.HTML()能够自动补全html缺失的标签
print(etree.tostring(html))



# print(html)
# print(dir(html))

# print(html.xpath('//li[1]/a/text()'))
# print(html.xpath('//li[1]/a/@href'))

# text_list = html.xpath('//a/text()')
# link_list = html.xpath('//a/@href')
# print(text_list)
# print(link_list)
#
# for text,link in zip(text_list, link_list):
#     print(text,link)

# el_list = html.xpath('//a')
#
# for el in el_list:
#     # print(el.xpath('//text()')[0], el.xpath('//@href')[0])
#     print(el.xpath('./text()')[0], el.xpath('./@href')[0])
#     print(el.xpath('.//text()')[0], el.xpath('.//@href')[0])
#     # print(el.xpath('text()')[0], el.xpath('@href')[0])

3.API

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。
路径表达式

表达式描述示例描述
tag选取此节点所有子节点div选取div元素所有子节点
/绝对路径,从根节点选取/div选取根节点下的div元素
//相对路径,全局匹配//div选取页面所有div元素
.选取当前节点
选取当前节点的父节点
@选取属性//div/@class提取所有div元素的class属性

谓语
用来查找特定的节点

表达式描述
//div[1]选取第一个div元素
//div[last()]选取最后一个div元素
//div[last()-1]选取倒数第二个div元素
//div[position()❤️]选取前2个div元素
//div[@class]选取具有class属性的div
//div[@class=‘title’]选取所有具有class=title属性的div元素
//div/[strong>35]选取div元素里strong元素大于35的div元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值