这是我参与更文挑战的第1天,活动详情查看:更文挑战
python爬虫或者自动化时xpath的应用
不管是在进行爬虫或者浏览器自动化时我们首先要进行元素的获取,而xpath则是一种非常高效的手段
首先来进行xpath的概念说明: xpath是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。简单的意思就是说xpath是从一段xml文档中根据节点属性来查找具体的元素。 而html和xml 都是标记语言,都是基于文本编辑和修改的。所以xpath也可用于在html语言中获取信息
xpath主要语法
-
一个正斜杠(/)和两个正斜杠(//)
在获取元素时一个斜杠'/'代表了从整个文档的根节点开始
比如/html/body/div/ul/li[1] 这个【1】相当于从数组中元素的下标
-
两个斜杠代表了从文档中匹配到的当前节点开始
比如"//div[@class = 'table-con']/ul/li[3]/input"而不用从根节点html开始
-
'@'表达式代表选取属性 比如href class id 等
实例: 下图是我在项目中的xpath获取 获取一个inPut输入框的节点进行操作 首先找到他的父节点 看是否唯一如果唯一直接使用相对路径//进行开始 在控制台进行xpath语法的验证
graph TD
Start --> Stop
xpath几个常用的函数
- contains (): //div[contains(@id,'in')] ,表示选择id中包含有’in’的div节点
- text():由于一个节点的文本值不属于属性,比如'baidu',所以,用text()函数来匹配节点://a[text()='baidu']。如果不完全匹配可以使用contains//a[contains(text(),'百度')]
- starts-with(): //div[starts-with(@id,'in')] ,表示选择以’in’开头的id属性的div节点
- not()函数,表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))] ,表示匹配出name为identity并且class的值中不包含a的input节点。写法如下://input[@id],如果我们要匹配出input节点不含用id属性的,则为://input[not(@id)]
xpath 轴目前未使用到 以后若有使用再来进行补全