xpath获取标签的属性值_CSS & Xpath定位页面元素的规则

87a46ebbbb10e49217d583abda8eb9bf.png

在写xpath、css之前,也许您需要知道为了能成功写好路径,需要什么工具?那么,看这里~

杜哈哈:如何使用Chrome、火狐浏览器+Try Xpath写xpath、css?​zhuanlan.zhihu.com
1de5884ee7ba0cf36338e2a2b9d1ac69.png

爬虫,爬什么?通常是通过 CSS或者Xpath 路径来定位到页面中我要爬取的内容。

路径怎么写?

一、CSS语法规则

1、基本语法

语法:Tag[attribute=‘value’]

示例: input[id='displayed-text']

PS: value中的字符要完全匹配页面属性值才能查找到

6ab908700f6059d8f1e6955201f239eb.png

2、简写语法

  • "#"代表id
  • "." 代表class

上述语法 input[id='displayed-text'] 可以写成:

#displayed-text 或者 input#displayed-text(或者input.displayed-text)

需要注意的是:

  • 后者能找得更快。
  • 如果前者找到的元素有多个,就要加上input,主要目的是为了唯一定位。所以需要根据实际情况进行修改定位的范围,以实现唯一定位。
  • 使用. 定位,可以不精确匹配(只需要字符串中包含.后边的字符就可以)

3、通配符

  • ^ 文本开始,规定语法中=后边的字符串是以?开始的
  • $ 文本结束,规定语法中=后边的字符串是以?结束的
  • * 文本包含的内容,规定语法中=后边的字符串包含什么

语法:Tag[attribute<special character通配符>=’value’]

示例:input[class^=‘name’] class的值以“name”开头,结果:所有以name开头的类

input[class$=‘name’]

input[class*=‘name’]

4、只通过标签名定位

  • Tag>tag 标签>子标签
  • Tag>#id名
  • Tag>.class名

二、Xpath语法规则

如果元素的ID不唯一、动态变化、或name等属性值也不唯一,需要使用Xpath定位。

除非要想查找一组元素,其他情况下必须定位到唯一节点。

  • 单斜杠“/”:要查找的元素是挨着上一级节点的子节点中的元素,中间不能跳级;
  • 双斜杠“//”:查找下级任何子节点,或子节点中的子节点……,可以跳级。

1、基本语法

语法://tag[@sttribute='value']

示例://div[@id='navbar']//div

82f0b58af7a41549b6c6c8c0357adc93.png

2、使用text() 创建Xpath

在一些标签中有text元素,可以通过 text 定位。

语法:tag[text()='value'] 其中tag是要定位到的 text 的标签

示例://div[@class='homepage-hero']//a[text()='Enroll now']

PS:a是标签名,”Enroll text”是该标签中的text

text()方法是精准匹配

fff0a2a8c3c6d297ebdd37654c2b782a.png

3、使用Contains创建Xpath

因为一些标签中的text可能存在很多空格(如“ Enroll now ”),使用上述text() 会因为精准匹配的原因定位不到元素,所以需要使用 contains 找包含value的定位

  • 语法1://tag[contains(@attribute,‘value’)]
  • 语法2://tag[contains(text(),‘value’)]
  • 示例1://a[contains(@class,‘abc123’)]
  • 示例2://tag[contains(text(),‘Enroll now’)]

注意,如果是属性,需要加@,如果是text(),则不需要。

10ce2060e6911b5caebf677c1a265f97.png

4、starts-with查找元素

有时,某一属性的元素值中包含多个字符串,但是字符串的顺序不同。这时使用contains可能会搜索出多个定位,所以可以使用start-with规定值是以什么字符开始的。

语法://tag[starts-with(@attribute,'value')]

示例://a[starts-with(@class,'abc123')] 搜索以“abc123”开头的class

???可以尝试一下://a[starts-with(text(),'abc123')]

5、查找父节点和评级节点

ff63bcbc84d9cf05e3a3877bddb7feee.png
(1)查找父节点 ;(2)preceding sibling 目前节点向上查找同级节点 ;(3)following sibling 向下查找同级节点

071f22e845b202ad0c785d5ccd039705.png

本菜鸟观看网易云课堂 CSS&Xpath页面元素定位 学习并整理以上内容以便未来复习用T^T

本教程不做商用,其中的图片是网易云课堂里的,若有版权问题,请私聊哦~

如果能对在座各位有帮助也是好事一件啊~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值