类似点:
- Xpath与css都有web页面定位元素的功能
- 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]
下一篇文章:4.3 Scrapy 爬取与存储数据