xpath 高级用法

1. 匹配当前节点下的所有: .//

. 表示当前

// 表示当前标签下的所有标签

注: 要配合使用

2. 匹配某标签的属性值: /@属性名称

这里以input里的value值为例:

例:xpath(//input/@value)

3. 匹配多个路径:|

在一个xpath中写的多个表达式用 | 分开, 每个表达式互不干扰。

例:xpath("//tr[6]/td[2]/text() | //tr[7]/td[2]/text()")

4.按属性匹配:@

获取所有id="test"的所有文本内容

xpath('//*[@id="test"]//text()')

5. 匹配不包含某个属性的标签 not

多用于表格中匹配中不包含表头信息的数据

例:xpath('//table/tr[not(@class="tbhead")]')

6. 匹配包含多个属性的标签: and

匹配所有的tr中不包含 tbhead 属性 和包含 head 的tr标签

xpath('//table/tr[not(@class="tbhead") and @class="head"]')

7. 匹配包含不同属性的名称相同的标签: or

匹配包含class="speedbar" 或者 class="content-wrap" 的标签

例:xpath('//div[@class="speedbar" or @class="content-wrap"]')

8. 将对象还原为字符串:etree.tostring()

将匹配到的对象,作为etree.tostring()的参数即可, 注: 返回字符串

sObj = xml.xpath('//*[@id="test"]')[0] #使用xpath定位一个节点

sStr = etree.tostring(sObj)

9.按轴(Axes)匹配

9.1 选取当前节点的所有子元素: child

获取div下的tr的标签

例:xpath('//div[@id="testid"]/child::tr/td/text()') # 感觉这种方法鸡肋, //div[@id="testid"]//tr/td 也可以实现

9.2 选取当前节点的所有属性:attribute

获取div标签所有的属性值

例: xpath('//div/attribute::*') # 感觉这种方法鸡肋,//div/@* 同样能实现

9.3 ancestor:父辈元素 / ancestor-or-self:父辈元素及当前元素

获取父辈元素的div的所有属性值, 在不好定位的情况下,通过孩子标签定位,这种方法可以用

xpath('//div[@id="test"]/ancestor::div/@*')

xpath('//div[@id="test"]/ancestor-or-self::div/@*')

9.4 descendant:后代 / descendant-or-self:后代及当前节点本身

获取孩子元素的div的所有属性值,感觉鸡肋

xpath('//div[@id="test"]/descendant::div/@*')

xpath('//div[@id="test"]/descendant-or-self::div/@*')

9.5 选取当前节点的所有命名空间节点:namespace

xpath('//div[@id="test"]/namespace::*')

9.6 定位:position

和通过下标定位一样, 方法鸡肋

xpath('//*[@id="test"]/ol/li[position()=2]/text()')

10.Xpath 函数:

10.1统计数量:count

统计符合要求节点的数量, 注: 返回字符串

xpath('count(//tr[@info])')

10.2字符串拼接 :concat

统计出来的两个内容的字符串进行“ + ”处理, 注: 返回字符串

xpath('concat(//li[@id="one"]/text(),//li[@id="three"]/text())')

10.3 解析当前节点下的字符:string

string()直解析匹配的第一个标签的值, 注: 返回字符串

xpath('string(//tr)')

10.4 获取当前节点的节点名称: local-name

返回当前属性的节点名称, 注: 返回字符串

xpath('local-name(//*[@id="test"])')

10.5 以指定的字符开头:starts-with

starts-with定位属性值以8开头的li元素

xpath('//tr[starts-with(@code,"one")]/text()')

10.6 小于:<

匹配所有tr标签属性info小于200的内容

xpath('//tr[@info<200]/text()')

11. 根据指定的文本内容选择

# 指定的文本内容可以是文本内容的部分, 也可以是全部

//div[2]/ul/li[contains(text(), "指定的文本内容")]/span/text()

注: 以上内容, 除标注外, 均返回列表!!

`总注: 在平常的xpath的使用中, 前8项的内容已基本够用, 使用时也应该使用简洁、易读、高效的匹配式。其余两项定位在较难的地方备选使用。切不可以为了追求高逼格, 刻意使用难懂难写低效的匹配式。人生苦短…“

本人水平有限, 如有错误欢迎提出指正!如有参考, 请注明出处!!禁止抄袭,遇抄必肛!!!

python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法相关推荐

  1. python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  2. python selenium定位元素方法_[原创] python selenium 元素定位方法封装

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 写好了公用的调用类,接下来就按照pageobject的设计模式写一下基本的元素定位方法,此处我们需要对python的方法传参有所了解,没有自信的同学可以返 ...

  3. python xpath定位 嵌套标签_python爬虫中使用Xpath方法定位a标签中所有的子标签的方法...

    老板扔给了我一个陈年语料,让我通过文章标题回原网址爬取一下对应的doi号,文章很好定位,但是在解析标题的时候遇到了问题,a标签中混合了i.sub.sup标签,在使用xpath时不能直接使用text方法 ...

  4. python xpath定位元素方法_二、appium+python xpath、android_uiautomator定位元素的方法

    1.继承webdriver的几个常见的定位方法 a.find_element_by_id("id") b.find_element_by_name() #text值,appium ...

  5. python的xpath用法_Python爬虫杂记 - Xpath高级用法

    xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...

  6. python xpath定位元素方法_python--通过xpath相对节点位置查找元素(续)

    之前写过相对父元素及下一个兄弟元素的方法. 这次补充一下xpath相对节点位置查找元素的所有方法.例子就不举了,自己可以去练练. xpath相对节点查找方法: 1.xpath('./ancestor: ...

  7. xpath定位元素方法_测试数十次,总结了APP元素定位的万能方法

    定位不到元素时候,一定很头大,最近一直在跑自动化流程,经常因为各种原因定位不到元素,经过数十次的尝试,我发现尤其是H5页面,出现定位不到元素的可能性更大,也总结尝试发现了在H5里面,通过切换上下文后用 ...

  8. python中的请求方法_Python爬虫HTPP请求方法有哪些

    HTTP请求方法 GET:请求指定的页面信息,并返回实体主体. HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST:向指定资源提交数据进行处理请求(例如提交表单或者上 ...

  9. seleniumpython定位网页元素方法_Python+Selenium 定位元素

    1.摘取网页上所有邮箱 练习场景:在某一个网页上有些字段是我们感兴趣的,我们希望摘取出来,进行其他操作.但是这些字段可能在一个网页的不同地方.例如,我们需要在关于百度页面-联系我们,摘取全部的邮箱. ...

最新文章

  1. 实战!我用“大白鲨”让你看见 TCP
  2. python得到一个excel的全部sheet标签值
  3. VAT code VAT NO.
  4. .net mvc 报表_FastReport.Net已实现对.Net 5.0的支持
  5. 中国豪华的政府大楼VS破学校
  6. 第二章:Java_基本语法_5 数组
  7. 1.5编程基础之循环控制 21 角谷猜想
  8. 一款APP设计的从0到1之:Android设计规范篇(转载)
  9. 1046. 划拳(15)-PAT乙级真题
  10. JAVA-1007. 素数对猜想 (20)
  11. 163Editor 编辑器概览
  12. 电信校园PPOE软件拨号破解之开启移动热点
  13. photoshop使用笔记-制作古代印章
  14. 事务机制:Redis能实现ACID属性吗?
  15. 活动及宣传内容发布审批小程序开发制作
  16. 在Linux上搭建私有云
  17. ADO 与ADO.NET
  18. idm+安卓版怎么改中文
  19. 微信小程序转账(简单流程代码)tp6接口
  20. 海尔小神童XQB40-F型波轮全自动洗衣机控制系统分析

热门文章

  1. mac用vscode打开html,Mac 命令行打开VsCode
  2. python时间序列进行线性插值_Python实现线性插值和三次样条插值
  3. 网站加速和服务器加速区别,cdn加速与不加速区别
  4. idea git 在文件上点了revert怎么复原_在 IntelliJ IDEA 中使用 Git,太方便了
  5. linux 复制文件 中文,linux中cp命令如何复制文件
  6. Celex Update CodeForces - 1358C(打表找规律)
  7. 校招萌新在阿里妈妈是如何成长的
  8. mysql mode_mysql中的sql_mode
  9. 天津全国计算机考试报名时间2015,2018年天津上半年计算机等级考试报名时间
  10. pythonelectron桌面开发案例_electron vue桌面应用入门实例