需先安装lxml库 -pip install lxml
一、语法简介
1.路径查询
//:查询所有子孙节点,不考虑层级关系
/:查找直接子节点
2.谓词查询
//div[@id]
//div[@id="maincontent"]
3.属性查询
//@class
4.模糊查询
//div[contains@id, "he"]
//div[starts-with(@id, "he")]
5.内容查询
//div/h1/text()
6.逻辑查询
//div[@di="head" and @class="s_down"]
//title | price
二、示例
1.本地html文件
<!DOCTYPE html>
<html lang="en">
<head>
<!--单标签需要在最后加/-->
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<ul>
<li id="l1" class="c1">北京</li>
<li id="l2">上海</li>
<li id="c3">深圳</li>
<li id="c4">江苏</li>
</ul>
</body>
</html>
2.python代码
from lxml import etree
#xpath解析本地文件
tree = etree.parse('xpath的基本使用.html')
#tree.xpath('xpath路径')
#查找ul下面的li
li_list = tree.xpath('//body/ul/li')
#查询所有有id属性的li标签
#text()获取标签中的内容
li_list = tree.xpath('//ul/li[@id]/text()')
#查找id为l1的li标签 注意引号的问题
li_list = tree.xpath('//ul/li[@id="l1"]/text()')
#查询id为l1的li标签的class的属性值
li_list = tree.xpath('//ul/li[@id="l1"]/@class')
#查询id中包含l的li标签
li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()')
#查询id的值为l开头的li标签
li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()')
#查询id为l1且class为c1的标签
li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')
#查询id为l1或id为l2的标签
li_list = tree.xpath('//ul/li[@id="l1" or @id="l2"]/text()')
print(li_list)
#判断列表的长度
print(len(li_list))