xpath解析器
1. 什么是xpath
- XPath 使用路径表达式在 HTML/XML 文档中进行导航
- XPath 包含一个标准函数库
- XPath 是 XSLT 中的主要元素
- XPath 是一个 W3C 标准
简而言之,xpath是在HTML/xml文档中,根据路径查找元素的语法。(效率很高,应用很广)
2. xpath语法
基础节点选择语法是啥?
在xpath中
- /绝对路径 隔开节点
- //相对路径
- .当前节点
- …当前父节点
3. xpath解析器详细使用
注意: xpath解析器 是属于lxml模块中的一个 文本解析器 因此使用xpath需要下载lxml模块
pip3 install lxml
xpath解析器可以做到一句话完成多步操作,下面开始核心操作演示
1. 导入xpath所在模块
from lxml import etree
doc = '''
<html>
<head>
<base href='http://example.com/' />
<title id='t1'>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html' a="xxx">Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html' class='li'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html' class='li li-item' name='items'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
<a href='image6.html' name='items'><span><h5>test</h5></span>Name: My image 6 <br /><img src='image6_thumb.jpg' /></a>
</div>
</body>
</html>
'''
html = etree.HTML(doc)
print(html.xpath("//*"))
print(html.xpath("//head"))
print(html.xpath("//div/a"))
print(html.xpath("//body//a"))
print(html.xpath("//body//a[@href='image1.html']"))
print(html.xpath("//body//a[@href='image1.html']/.."))
print(html.xpath('//body//a[1]'))
'''xpath选择器中中括号内部可以放属性也可以放位置数(索引) 从1开始'''
print(html.xpath("//body//a[1]/parent::*"))
print(html.xpath("//body//a[@href='image1.html']"))
print(html.xpath("//body//a/text()"))
print(html.xpath("//body//a/@href"))
print(html.xpath('//title/@id'))
print(html.xpath('//body//a[@class="li"]'))
print(html.xpath('//body//a[contains(@class,"li")]/text()'))
print(html.xpath('//body//a[contains(@class,"li") or @name="items"]'))
print(html.xpath("//a[last()]/@href"))
print(html.xpath("//a[position()<3]/@href"))
print(html.xpath("//a[position()>3]/@href"))
print(html.xpath("//a[last()-2]/@href"))
print(html.xpath("//a/ancestor::*"))
print(html.xpath('//a/ancestor::div'))
print(html.xpath('//a[1]/attribute::*'))
print(html.xpath('//a[1]/child::*'))
print(html.xpath('//a[6]/descendant::*'))
print(html.xpath('//a[1]/following::*'))
print(html.xpath('//a[1]/following::*[1]/@href'))
print(html.xpath('//a[1]/following-sibling::*'))
|