XPath-》XML Path Language
优点:
(1)可以在XML中直接查找信息
(2)支持HTML的查找
(3)通过元素和属性进行导航
使用方法:
1 from lxml import etree 2 selector = etree.HTML(目标内容) #将目标内容转换为XPath格式 3 selector.xpath(表达式) #返回查找到的列表
基础语法知识:
(1)// 双斜杠:定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回
(2)/ 单斜杠:寻找当前标签路径的下一层路径标签或者对当前路径标签内容进行操作
(3)/text() :获取当前路径下的文本内容
(4)/@xxx :提取当前路径下标签的属性值
(5)| 管道符 :可选符号,使用 | 可以选取若干个路径,类似 or 的功能,如//p|div。
(6). 点 :用来选取当前节点
(7).. 双点 :选取当前节点的父节点
伪代码示例:
from lxml import etree html = ' ' selector = etree.HTML(html) # 匹配根目录下,id='content' 的div标签下的id='ul'的ul标签下的li标签的文本内容 content = selector.xpath("//div[@id='content']/ul[@id='ul']/li/text()") for i in content: print(i) #匹配根目录下a标签,使用“@标签属性”的方法,获取a标签的href属性值 #content = selector.xpath("//a/@href")
特殊用法:
(1)starts-with
content = selector.xpath("//div[starts-with (@id, 'a')]/text()") #提取div标签中id属性值以a开头的文本,比如 <div id='aabb'> aa </div>,提取出来的就是aa
(2)text()和position()
如果需要提取的标签中没有属性,则可以用text()或者position()方法来识别标签
#提取文本为hello的div标签中的p标签的文本 content = selector.xpath("//div[text()='hello']/p/text()") #提取文本为hello的div标签中的第二个p标签的文本 content = selector.xpath("//div[text()='hello']/p[position()=2]/text()") #也可以使用多重过滤,比如ul[position()=3][@id='a']
获取XPath的两种方法:
(1)根据标签规则手动输入
(2)在浏览器开发者模式中找到目标标签---》右键Copy XPath