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 xpath定位元素方法_Python爬虫杂记 - Xpath高级用法

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

  2. python用psf函数_Python 嵌套函数(高级用法)

    Python 嵌套函数(高级用法) 一.嵌套函数(高级用法) 1.嵌套函数 函数的嵌套调用是在"函数调用中再调用其他函数".也就是说:函数嵌套允许在一个函数中调用另外一个函数.如下 ...

  3. c++ map用法_Python的 5 种高级用法,效率提升没毛病

    原创:机器之心(ID:almosthuman2014) 任何编程语言的高级特征通常都是通过大量的使用经验才发现的.比如你在编写一个复杂的项目,并在 stackoverflow 上寻找某个问题的答案.然 ...

  4. python的xpath用法介绍_python爬虫之xpath的基本使用详解

    本篇文章主要介绍了python爬虫之xpath的基本使用详解,现在分享给大家,也给大家做个参考.一起过来看看吧 一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XM ...

  5. python requests下载网页_python爬虫 requests-html的使用

    一 介绍 Python上有一个非常著名的HTTP库--requests,相信大家都听说过,用过的人都说非常爽!现在requests库的作者又发布了一个新库,叫做requests-html,看名字也能猜 ...

  6. python爬京东联盟_python爬虫框架scrapy实战之爬取京东商城进阶篇

    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧 ...

  7. python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  8. Python多线程多进程、异步、异常处理等高级用法

    文章目录 前言 多线程多进程 多线程 多进程 协程 总结 异步 基本概念 异步编程 asyncio aiohttp 异常 常见异常 异常处理 自定义异常 lambda表达式 lambda表达式用法 高 ...

  9. 爬虫:Requests高级用法

    目录 1.文件上传 2.Cookies cookies的遍历解析 构造cookies 3.会话维持 4.SSL证书认证 一.忽略警告 二.捕获警告到日志的方式或略告警 三.指定对应的客户端证书 5.代 ...

最新文章

  1. 代码生成codegen
  2. 替换元素和非替换元素的学习
  3. 要求用户提供输入,直到他们给出有效的答复
  4. 小米做手机是真不赚钱,米粉要支持请多容忍广告
  5. Razor @Html.Raw()的作用
  6. 【好程序员笔记分享】——下拉刷新和上拉加载更多
  7. 2021总结-》2022年
  8. c# 为你的Form实现动画的效果
  9. 算法设计和数据结构学习_2(常见排序算法思想)
  10. Oracle10G各版本下载
  11. 039.有符号数除法
  12. Septentrio板卡接收机连接方式
  13. java做报表_Java报表制作详细过程
  14. 西安交通大学计算机学院保研面试,西安交通大学电子与信息工程学院(专业学位)计算机技术保研细则...
  15. python做动画视频教程_Python入门教程:Python创建动画竟然这么简单!
  16. 4.输入10个字符,统计里面大写英文的个数
  17. 人脸识别实名认证在景区门禁系统中的应用
  18. linux alc权限,Linux账号管理与ALC权限设定(二)
  19. 向下兼容性格什么意思_恭喜你,被向下兼容了|有启发
  20. 【React Native】集成声网Agora语音通讯

热门文章

  1. python读excel两列为字典_用python读取Excel并保存字典?一两行代码完成骚操作
  2. 转行AI成功的秘诀只有一个,那就是……
  3. firefox+android+平板,Firefox OS首款平板现身,“三头并进”追赶Android
  4. 加sql查询语句导出_搞不懂这些查询语句,SQL简单查询也无法从入门到熟练
  5. 小波相干wtc matlab,实现时间序列的小波相干性分析,并画出图谱
  6. goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...
  7. html边框有箭头,css简单实现带箭头的边框
  8. java批量转换图片格式
  9. android and javascript
  10. 浅述几年建站SEO之路的失败与反思