1.什么是Xpath?
Xpath 是一门在XML或者html文档中导航查找信息的语法,对HTML有很好的支持 xpath 是一个w3c的标准;xpath 包含标准库;(ps:xml实和html文件一样,是一个文本文件,意思是可扩展标记语言,是一类比较简单的数据存储语言。HTML是被设计用来显示数据的,重点是显示数据以及如何显示数据更好上面。HTML是与显示信息相关的, XML则是与描述信息相关的。很多软件中都会包含有一些XML文件,其实这是一种扩展性标识语言文件,是用于标记电子文件使其具有结构性的标记语言,通常无法直接打开。)
2.Xpath语法的详细用法?
- 1.节点关系 (层次关系)
- 2.节点选择
2.1节点选择
表达式:nodename |/ |// | . | .. | @
nodename: 选取此节点的所有子节点
/ :从根节点选取
//div: 选取所有div子元素,而不考虑他们的位 . : 选取当前节点
.. : 选取当前节点的父节点
@ : 选取属性
用法举例:
Nodename//div:选取所有属于nodename元素的后代的div元素,不管在nodename之后的任意位置;
/article/div[1]:选取属于article子元素的第一个div元素
/article/div[last()]:选取属于article子元素的最后一个div元素
/article/div[last()-1]:选取属于article子元素的倒数第二个div元素
//@class :选取所有名为class的属性;
//div[@lang]:选取所有拥有lang属性的div元素
//div[@lang=“eng”]:选取所有lang属性为eng的div元素
/div/*:选取属于div元素的所有子节点
//* :选取所有元素
//div[@*]:选取所有带属性的title元素
/div/a|//div/p :选取所有div元素的a和p元素
//span|//ul :选取文档中的span和ul元素
Article/div/p|//span :选取所有属于article元素的div元素的p元素以及文档中的所有的span元素;
2.2 Xpath语法中的谓语用来查找某个特定的节点或者包含某个指定值的节点,谓语被嵌套在方括号内;
-
3.使用技巧
3.1:"*" 通配符,他可以匹配任何元素节点;
3.2:/text()可以获取标签中的文字信息
3.3:结果为列表的数据结构,可以通过切片获取字符串数据结构。
3.4:遇到相同的字符开头的多个标签,相同时爬取时,不需要构造多个Xpath 路径,通过starts-with(@属性名称,属性字符相同的部分)便可获取多个标签内容;
用法举例:
<li class = "tag-1">需要的内容1</li>
<li class = "tag-1">需要的内容2</li>
<li class = "tag-1">需要的内容3</li>
获取内容:选取所有class属性为tag的div元素
Contents = selector.xpath('//li[starts-with(@class,"tag")]/text()')
for content in Contents:
print(content)
# starts-with() 可获取类似标签的信息
3.5:当遇到标签套标签情况时:
用法举例:
<div class = “red”>需要的内容1
<h1>需要的内容2</h1>
</div>
#相同时爬取内容可以通过 string(.)完成;
#选取所有class属性为red的div元素;
from lxml import etree
html2 = '''
<div class = "red"> 需要的内容1
<h1>需要的内容2</h1>
</div> '''
selector = etree.HTMl(html2)
content1 = selector.Xpath("//div[@class = "red"]")[0]
content2 = selector.Xpath('string(.)')
print(content2)