xpath的基本语法
1.路径查询
//:查找所有子节点,不考虑层级关系
/:找直接子节点
2.谓词查询
//div[@id] 查找带有某个id的节点
//div[@id = “…”] 查找带有某个id且id名称限定的节点
3.属性查询
//@class
注意这里返回的是class的属性(也就是class后面的那个字符串),无法跟text()连在一起用!!
4.模糊查询
//div[contains(@id, “…”)] 包含
//div[starts-with(@id,”…”)] 以某个字符开头的
5.内容查询
//div/…/text()
6.逻辑运算
//div[@id=”…” and @class=”…”]
//div[@id=”…” or @class=”…”]
xpath的两种解析方式
第一种方式:解析本地文件
<body>
<ul>
<li id='l1' class='c1'>北京</li>
<li id='l2'>上海</li>
<li id='k3'>深圳</li>
</ul>
<ul>
<li>厦门</li>
<li>福州</li>
</ul>
</body>
from lxml import etree
tree = etree.parse("xpath的基本使用.html")#传入文件的名称
#查找ul下面的li
li_list = tree.xpath('//body/ul/li')#这里还有一种写法是:'//body//li'
#查找所有有id属性的li标签
li_list = tree.xpath('//body/ul/li[@id]')
li_list = tree.xpath('//body/ul/li[@id]/text()')#加上一个text可以获取标签中的内容——北京、上海
#查找id为l1的标签
li_list = tree.xpath('//body/ul/li[@id="l1"]/text()')#注意引号!
#查找到id为l1的li标签的class的属性值
li_list = tree.xpath('//body/ul/li[@id="l1"]/@class')
#查询id中包含l的li标签
li_list = tree.xpath('//body/ul/li[contains(@id,"l")]')
#查询id中以l开头的li标签
li_list = tree.xpath('//body/ul/li[starts-with(@id,"l")]')
#查询id为l1且class为c1的
li_list = tree.xpath('//ul/li[@id="l1"and @class="c1"] ')
#查询id为l1或id为l2的
li_list = tree.xpath('//ul/li[@id="l1"]/text()| //ul/li[@id="l2"]/text()')
注,以上所有的返回的li_list都是一个列表!只有属性查询不能接text(),其他都可以使用text()来显示标签中的内容