xpath通过兄弟节点取数据

通过兄弟节点去查询其他节点

今天我们简单说一下借助兄弟节点去查询其他节点的内容:
今天拿到一个要匹配如下箭头所指内容(标题、日期、阅读次数、标签):
在这里插入图片描述
按照我的习惯我是先找它们共有的一个块区域:
在这里插入图片描述在这里插入图片描述
在匹配之前先简单聊一聊xpath:
xpath匹配是按照树结构通过节点一层层的往下找。
xpath语法
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
… 选取当前节点的父节点。
@ 选取属性。
如图:
父节点:
div是h2、small的父节点
h2是a的父节点
small是span的父节点
子节点:
与父节点刚好相反。
h2、small是div的子节点
a是h2的子节点
span是small的子节点
兄弟节点:
h2与small是兄弟节点,即同级。

匹配:
但是当我要匹配这个区域根节点开始时,发现这个div里有id,本打算去取id来定节点,但是发现每个块的id还有些不一样,那就取class属性吧!但是好长啊!以我的性格取这么长,基本和答案是无望了,一对比,发现这么长的属性与其它块的属性并不是完全相同,所以就打算取它们块与块之间共有的元素,但是木有啊,木有匹配到。
既然通过共有的块来找元素没有找到,但就单个标题的元素块来找,先找标题的块。然后再通过标题返回上一级节点,即兄弟节点的父节点,再往下取节点,其实也是间接的共有区域来取。
正常思想是我们先找到父节点,然后按顺序节节往下找,遇到兄弟节点分开找。
这里是我们先找到其中一个兄弟节点,然后再通过兄弟节点返回到父节点,再往下找。
由上图上代码:

res=response.xpath('//h2/a')   #已经取到a节点
for i in res:
    new_url=i.xpath('.//@href').extract_first()   #直接取内容
    date=i.xpath('.//../../small/span[@class="date updated"]/text()').extract_first() 
    								#返回到div父节点然后再往下找
    times=i.xpath('.//../../small/text()').extract()[1]  #与date同理
    print(times)

这样我们就可以通过兄弟节点来匹配出我们想要的内容了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值