XPath学习

1. 什么是XPath

  • 解析XML的一种语言(HTML是XML的子级),广泛用于解析HTML数据。
  • 几乎所有的语言都能使用XPath,如Java和C语言。
  • 除了XPath还有其他手段解析XML,比如BeautifulSoup(py),lxml(py),DOM(java,js),SAX(java),JSDOM(js),DOM4J,minixml等。

2. 为啥使用XPath

  • 元素没有id,name,class等明显或者唯一属性。
  • 元素id是动态的(刷新以后会变化)。
  • 通过元素定位工具抓取不到。
  • 复制的XPath不稳定,当页面的源码发生更改的时候,复制的XPath也会发生变化。或者说,元素本身没有变化,但是其他元素修改导致该元素定位失败。

3. XPath语法

  • 层级/直接子集,//跳级(2层,3层,4层……等这种)
  • 任意元素* --> //*表示页面中的任意一个节点。
  • 属性@属性访问(一般在节点上都有属性)
    //*[@class="属性值"]
    
  • 节点.当前节点;..父级节点(表示返回上一级)
    例子:
    在这里插入图片描述
    //*[text()="新西兰"]/../../div/span[2]/div/a[3](括号中的数字表示第几个)
    
    根据上面的图,这个表达式从【新西兰】> 【div class=“hide_box”】>【div class=“head_city”】>【div class=“ndwz”】>【span class=“city”】>【div class=“hide_box”】>【a 斐济】
  • 函数
    • text(): 精确查询,标签内或者节点内的文字。但是如果文本后面有空格等特殊符号,则有可能通过这个方法无法找到。
      //*[text()="文本值"]
      
    • contains():模糊查询,检测某一个属性并不是完全等于某一个值,只是包含关系
      //*[contains(text(), "文本值")]
      //*[contains(@class, "baidu")]
      
    • starts-with():如果在查找的内容前面部分确定。支持文本属性
      //*[starts-with(@name, "ref")]
      //*[starts-with(text(), "搜索")]
      
  • and:多个条件进行搜索。
    //*[@class='baidu' and @name='ref']
    
  • 特殊svg的定位://*[name()='svg']

参考视频:

  • 【Baby!还有定位不到的元素吗?无处安放的 Xpath(下集)-哔哩哔哩】 https://b23.tv/If7SzmZ
  • 【智源学院】20分钟带你搞懂XPath — Scrapy数据解析神器-哔哩哔哩】 https://b23.tv/1G6BtO3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值