【爬虫】Xpath和CSS信息提取的方法异同点

news/2024/7/19 10:57:13 标签: css, 爬虫, xpath

类似点:

  1. Xpath与css都有web页面定位元素的功能
  2. Xpath与css结构类似

区别:

1. Xpath比较强大,而css选择器在性能上更优,运行速度更快,语法更简洁

  • CSS再chrome,火狐查找速度快,效率高,xpath在IE游览器相对慢些(IE游 览器无论是css还是xpath都比谷歌,火狐要慢(IE没有自己的xpath解析器 (Parser)))
  • 当查找元素比较简单,用css没错,如果复杂,用xpath比较好

2. CSS不支持文本搜索,xpath支持文本搜索text()

3. Xpath调用extract()获得对象元素文本列表,使用extract_first()获取列表第一个元素值;

4. 直接子元素:Xpath中的直接子元素使用”/”定义的,而在css中,它是使用”>”定义的;

        Xpath://div/input

        Css:div > input

5. 后代元素:如果一个元素在另一个元素的内部(子孙元素),则它在xpath中使用”//”定义,而在css中仅使用空格定义;

        Xpath://div//input

        Css:div input

6. ID定位:XPATH中的元素id使用以下内容定义:"[@id=‘kw’]",而在CSS中使用:"#kw";

        Xpath://input[@id=’kw’]

        Css:input # kw

7. Class定位:对于class属性,xpath类似id,而css中用一个点表示(xpath可用点连续调用);

        Xpath://input[@class=”s_ipt”]

        Css:input.s_ipt

8. 哥哥元素:preceding-sibling 前兄弟(页面中位于同一父节点内的上一个相邻元素);

        Xpath://a[@name=’tj_baike’]/preceding-sibling::a

        Css:无法实现

9. 弟弟元素:following-sibling 继兄弟(这对于表单元素非常有用,即页面中位于同一父节点内的下一个相邻元素);

        Xpath://input[@class=”s_ipt”]/following-sibling::a

        Css:input[class=”s_ipt”] + a  (~所有同级别的兄弟结点)

10. 父结点元素:页面中位于一个结点的上级元素;

        Xpath://input/parent

        Css:无法实现

11. 属性值:我们可以根据属性值定位元素;

        Xpath://input[@name=’username’]

        Css:input[name=’username’]

12. 多个属性值:我们甚至可以通过多个属性来定位元素;

        Xpath://input[@name=’rsv_spt’ and @value=”1”]

        Css:input[name=’login’][type=’submit’]

13. 选择一个元素的第n个结点

        Xpath:[position()=n]

        Css:无法实现

14. 第一个子元素;

        Xpth://div[@id=’u1’]/a[1]     (extract_first())

        Css:div # u1 a:first-child

15. 最后一个子元素;

        Xpath://div[@id=’u1’]/a[last()]

        Css:div # u1 a:last-child

16. 第二个子元素;

        Xpth://div[@id=’u1’]/a[2]                   

        Css:div # u1 a:nth-child(2)

17. 模糊匹配:selenium中允许使用^=,$=或*=进行部分字符串匹配

^=匹配前缀

        Xpth:input[starts-with(@id,’user’)]

        Css:input[id^=’name’]

$=匹配后缀

        Xpath:input[ends-with(@id,’name’)]

        Css:input[id$=’name’]

*=匹配包含

        Xpth:input[contains(@id,’sernam’)]

        Css:input[id*=sernam]


http://www.niftyadmin.cn/n/422753.html

相关文章

Redis 的安装

1、下载 Redis 源码并解压 打开 Redis 的官网,然后复制其下载的地址,地址如下: http://download.redis.io/releases/redis-5.0.8.tar.gz 复制 复制到下载地址以后,在 shell 下可以通过 wget 即可下载其源码,命令如…

计算机网络(网络层,传输层,应用层,复习自用)

计算机网络 网络层网络层功能IP数据报格式IP数据报分片IPV4地址网络地址转换(NAT)子网划分与子网掩码无分类编址CIDRARP协议DHCP协议ICMP协议IPV6路由算法及路由协议RIR协议及距离向量算法OSPF协议及链路状态算法BGP协议IP组播移动IP网络层设备 传输层传…

jmeter 在linux服务器中执行性能测试、监听服务器资源指标

jmeter监控服务器资源 资源准备jmeter安装(Windows 版)jmeter安装(linux 版)ServerAgent安装(linux 版)配置脚本并执行测试 资源准备 下载apache-jmeter-5.5文件;下载ServerAgent-2.2.3文件; jmeter安装&…

c++深搜1-迷宫类问题

目录 1.问题引入 2.知识讲解 3.例题解析 【例题1】迷宫的第一条出路。 题目描述 输入格式 输出格式 样例 输入数据#1 输出数据#1 输入数据#2 输出数据#2 【例题2】迷宫的所有路径。 【例题3】走出迷宫的最少步数。 1.问题引入 拓拓小时候玩迷宫游戏时&#xff…

代码随想录算法训练营第53天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

1143.最长公共子序列 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对…

ZooKeeper的集群部署和启动与关闭

ZooKeeper是一个分布式应用程序协调服务。一个ZooKeeper集群可以存在多个Follower和Observer服务器,但只允许存在一台Leader服务器。如果Leader服务器宕机,那么ZooKeeper集群的其它服务器会投票选举出一个新的Leader服务器,为防止投票数不过半…

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根,不使用库函数。保留一位小数。 数据范围:∣val∣≤20 。 二、输入描述 待求解参数,为double类型(一个实数) 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…

[openeuler]Yocto embedded 联合sig例会 (2022-12-15)

Yocto & embedded 联合sig例会 (2022-12-15)_哔哩哔哩_bilibili