【干货】xpath语法学习记录

Python Xpath语法

节点

  • xpath(‘//div’):选取所有div节点,并包含它所有的子节点;

  • xpath(‘x/div’):选取 x 节点的下一层所有div节点,若 x 没有则从根节点开始;

  • xpath(‘x/..’):选取 x 节点的父节点;

  • xpath(‘div/text()’):获得 div 标签中的 text 值;

  • xpath(‘div/@class’):获得 div 标签中 class 属性的值,class 可替换为其他属性名;

  • xpath(‘div/@*’):获得 div 标签中所有属性的值;

  • xpath(‘div/*’):选取 div 节点下所有子节点;

  • xpath(‘div/*/span’):选取 div 节点下第二级所有span节点;

  • xpath(‘div/node/name()’):获得node节点的名字;

谓语

  • xpath(‘/body/div[1]’):选取 body 下第一个 div 节点;

  • xpath(‘/body/div[last()]’):选取 body 下最后一个 div 节点;

  • xpath(‘/body/div[last()-1]’):选取 body 下倒数第二个 div 节点;

  • xpath(‘/body/div[position()<=3]’):选取 body 下前三个 div 节点;

  • xpath(‘/body/div[not(@class)]’):选取 body 下不含 class 属性的 div 节点;

  • xpath(‘/body/div[not(@class=”zhang”)]’):选取 body 下不含 class 属性值等于 zhang 的 div 节点;

  • xpath(‘/body/div[@class]’):选取 body 下含有 class 属性的 div 节点;

  • xpath(‘/body/div[@class=”zhang”]’):选取 body 下 class 属性值等于 zhang 的 div 节点;

  • xpath(‘/body/div[contains(@class,”zhang”)]’):选取 body 下 class 属性值含有 zhang 的 div 节点;

*注:若是含有中文,则:keyword = u’中文’ xpath(‘/body/div[contains(@class,”%s”)]’ %(keyword))
或 xpath(u’/body/div[contains(@class,”中文”)]’)*

  • xpath(‘//a|//div’):选取所有的 a 节点和 div 节点;

  • xpath(‘/div/self::*’):选取当前 div 节点;

  • xpath(‘/div/parent::*’):选取 div 节点的父节点;

  • xpath(‘/div/ancestor::*’):选取 div 节点的所有先辈节点(父、祖父);

  • xpath(‘/div/ancestor-or-self::‘):选取 div 节点的所有先辈节点包含自身(可以指定节点,将 替换为节点名);

  • xpath(/div/preceding::* ):选取 div 节点之前的所有节点(可以指定节点,将 * 替换为节点名);

  • xpath(‘/div/preceding-sibling::‘):选取 div 节点之前的所有兄弟节点(可以指定节点,将 替换为节点名);

  • xpath(‘/div/following::‘):选取 div 节点之后的所有节点(可以指定节点,将 替换为节点名);

  • xpath(‘/div/following-sibling::‘):选取 div 节点之后的所有兄弟节点(可以指定节点,将 替换为节点名);

  • xpath(‘/div/descendant::‘):选取 div 节点的所有后代(子、孙)节点(可以指定节点,将 替换为节点名);

  • xpath(‘/div/child::‘):选取 div 节点的所有子节点(可以指定节点,将 替换为节点名 );

  • xpath(‘/div/attribute::‘):获取 div 节点的所有属性值(可以指定属性,将 替换为属性名);

问题及思考

问题1. 若想获取一个节点下的所有内容,但其内容包含在当前节点下的不同子节点中:

解决方案:
- xpath(‘string(//div/some-node)’).extract()[0]

问题2. //text() 和 string() 对比验证:

解决方案:
- xpath(‘//div//text()’):div节点下所有子孙节点的内容;
- xpath(‘string(//div)’):div节点下所有子孙节点的内容;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值