xpath详解

更新时间:2023-07-09 23:36:45 阅读: 评论:0

pascha
xpath详解
#!/usr/bin/env pythonxw
# -*- coding:utf-8 -*-
野兽家园"""
1. ⽹页的解析⽅式
1) xpath(简单)
2) 正则(最难)
3) css(需要懂⽹页的css)
4) bs4(⽐xpath难⼀点点)
2. xpath的基本⽤法
会计的岗位职责1) 环境准备:
⽕狐浏览器(版本49.0以下)
firebug
firexpath
2) 基本操作
//元素标签名
例如: //div,查找⽹页内的所有div
//元素标签名[@属性名='具体内容']
例如: //div[@class='box'],查找class为box的div
//元素标签名[第⼏个]
例如: //div[@class='box'][2],查找符合条件的第2个div
//元素1/元素2/元素3...
例如: //ul/li/div/a/img,查找ul下的li下的div下的a下的img标签
//元素1/@属性名
例如://ul/li/div/a/img/@src, 查找ul下的li下的div下的a下的img标签的src属性
//元素/text()
例如://a/text(), 获取a标签之间的⽂本(⼀级⽂本)
//元素//text()
例如://div[@class='box']//text(), 获取class为div下的所有⽂本
//元素[contains(@属性名,'相关属性值')]
try again例如://div[contains(@class,'zhangsan')] 查找class中包含zhangsan的div
//*[@属性='值']
例如://*[@name='lisi']查找所有name为lisi的元素
"""
****************************(⼆)***********************************************
由于最新版⽕狐不在⽀持FireBug等开发⼯具,可以通过下载49版本以下的⽕狐就可以增加Firebug等扩展了。什么是Xpath?
XPath是XML的路径语⾔,通俗⼀点讲就是通过元素的路径来查找到这个标签元素。
⼯具
Xpath的练习建议⼤家安装⽕狐浏览器后,下载插件,FireBug。
Xpath使⽤⽅法
注:默认死格式 先写 //* 代表定位页⾯下所有元素
1、Xpath⽀持ID、Class、Name定位功能
  1)、通过ID定位
    //*[@id='kw']
  2)、通过Class定位
    //*[@class='class_name']
  3)、通过Name定位
    //*[@name='name']
steal
2、如果标签没有ID、Class、Name三总属性,Xpath还⽀持属性定位功能
    @ 代表以属性定位,后⾯可以接标签中任意属性
      //*[@other='attribute']
3、当标签的属性重复时,Xpath提供了通过标签来进⾏过滤
     将 * 换位任意标签名,则可根据标签进⾏筛选
     //input[@placeholder='⽤户名']
4、当标签页重复时,Xpath提供了层级过滤
例如:找不到⼉⼦,那么就先找他的爸爸,实在不⾏可以再找他的爷爷
  1)、⽀持通过 / 进⾏层级递进,找到符合层级关系的标签
    //form/div/input[@placeholder="⽤户名"]
  2)、当层级都重复时,可以通过单个层级的属性进⾏定位
    //form/div[@class='login-ur']/input
5、⼀个元素它的兄弟元素跟它的标签⼀样,这时候⽆法通过层级定位到。因为都是⼀个⽗亲⽣的,多胞胎兄弟。Xpath提供了索引过滤
    通过索引,在List中定位属性,与python的索引有些差别,Xpath从1开始
      //lect[@name='city'][1]/option[1]
6、上⾯⼏种如果都⽤上了之后还重复的话,我们就可以使⽤Xpath提供的终极神器,逻辑运算定位。and 或 or   
    1)、通过and来缩⼩过滤的范围,只有条件都符合时才能定位到
      //lect[@name='city' and @size='4' and @multiple="multiple"]
    2)、or就相反了,只要这些筛选中,其中⼀个出现那么久匹配到了
      //lect[@name='city' or @size='4']
******************************(三)*********************************************************
1.xpath较复杂的定位⽅法:
现在要引⽤id为“J_password”的input元素,可以像下⾯这样写:
WebElement password = driver.findElement(By.xpath("//*[@id='J_login_form']/dl/dt/input[@id='J_password']"));
其中//*[@id=’ J_login_form’]这⼀段是指在根元素下查找任意id为J_login_form的元素,此时相当于引⽤到了form元素。后⾯的路径必须按照源码的层级依次往下写。按照图所⽰代码中,我们要找的input元素包含在⼀个dt标签内,⽽dt⼜包含在dl标签内,所以中间必须写上dl和dt两层,才到input这层。当然我们也可以⽤*号省略具体的标签名称,但元素的层级关系必须体现出来,⽐如我们不能写成//* [@id='J_login_form']/input[@id='J_password'],这样肯定会报错的。
另外⼀种写法:WebElement password = driver.findElement(By.xpath("//*[@id='J_login_form']/*/*/input[@id='J_password']"));
2.xpath的模糊定位⽅法:
这段代码中的“退出”这个超链接,没有标准id元素,只有⼀个rel和href,不是很好定位。⽤xpath的⼏种模糊匹配模式来定位它,主要有四种⽅式:
a. ⽤contains关键字,定位代码如下:
driver.findElement(By.xpath(“//a[contains(@href, ‘logout’)]”));
这句话的意思是寻找页⾯中href属性值包含有logout这个单词的所有a元素,由于这个退出按钮的href属性⾥肯定会包含logout,所以这种⽅式是可⾏的,也会经常⽤到。其中@后⾯可以跟该元素任意的属性名。
b. ⽤start-with,定位代码如下:
driver.findElement(By.xpath(“//a[starts-with(@rel, ‘nofo’)]));
这种⽅式⼀般⽤于知道超链接上显⽰的部分或全部⽂本信息时,可以使⽤。
这句的意思是寻找rel属性以nofo开头的a元素。其中@后⾯的rel可以替换成元素的任意其他属性
c. ⽤Text关键字,定位代码如下:
driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));
直接查找页⾯当中所有的退出⼆字,根本就不⽤知道它是个a元素了。这种⽅法也经常⽤于纯⽂字的
查找
d.如果知道超链接元素的⽂本内容,也可以⽤
driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));
3.XPath 关于⽹页中的动态属性的定位,例如,ASP 应⽤程序中动态⽣成 id 属性值,可以有以下四种⽅法:
a.starts-with      例⼦: input[starts-with(@id,'ctrl')]              解析:匹配以 ctrl开始的属性值
参考⽹址:/qingchunjun/p/4208159.html
xpath详解:/ktgu/archive/2009/04/16/1353246.html
******************************(四)*****************************************************
/xpath/xpath_syntax.asp
/bookstore/book[1]
选取属于 bookstore ⼦元素的第⼀个 book 元素。
givenchy怎么读/bookstore/book[last()]选取属于 bookstore ⼦元素的最后⼀个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore ⼦元素的倒数第⼆个 book 元素。
/bookstore/book[position()<3]选取最前⾯的两个属于 bookstore 元素的⼦元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须⼤于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须⼤于 35.00。==========================(5)==============================================
google英文
1. 返回⼀个SelectorList 对象
SelectorList 类是内建 list 类的⼦类,提供了⼀些额外的⽅法:
xpath(query)
圣诞老人的英文
css(query)
extract()
re()
__nonzero__()
2. 返回⼀个list(就是系统⾃带的那个) ⾥⾯是⼀些你提取的内容
3. 返回2中list的第⼀个元素(如果list为空抛出异常)
exploited
4. 返回1中SelectorList⾥的第⼀个元素(如果list为空抛出异常),和3达成的效果⼀致
5. 返回的是⼀个str(如果Python2为unicode应该), 所以5会返回str的第⼀个字符
hrefs = respon.xpath('//div[@class="el"]/p/span/a/@href') print(hrefs)
for url in hrefs:
href = act()

本文发布于:2023-07-09 23:36:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/172504.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:元素   属性   标签   定位   层级   匹配   查找
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图