CSS/Xpath 选择器 第几个子节点/父节点/兄弟节点

0.参考

1.初始化

In [325]: from scrapy import Selector

In [326]: text="""
     ...: <div>
     ...:     <a>1a</a>
     ...:     <p>2p</p>
     ...:     <p>3p</p>
     ...: </div>"""

In [327]: sel=Selector(text=text)

In [328]: print(sel.extract())
<html><body><div>
    <a>1a</a>
    <p>2p</p>
    <p>3p</p>
</div></body></html>

2.父节点/上一个下一个兄弟节点

In [329]: sel.xpath(‘//a/parent::*/p‘).extract()
Out[329]: [‘<p>2p</p>‘, ‘<p>3p</p>‘]

In [330]: sel.xpath(‘//p/preceding-sibling::a‘).extract()
Out[330]: [‘<a>1a</a>‘]

In [331]: sel.xpath(‘//a/following-sibling::p‘).extract()
Out[331]: [‘<p>2p</p>‘, ‘<p>3p</p>‘]

3.CSS 第几个子节点

3.1 通用

#完整子节点列表,从第一个子节点开始计数,并且满足子节点tag限定
In [332]: sel.css(‘a:nth-child(1)‘).extract()
Out[332]: [‘<a>1a</a>‘]
#完整子节点列表,从最后一个子节点开始计数,并且满足子节点tag限定
In [333]: sel.css(‘a:nth-last-child(1)‘).extract()
Out[333]: []

In [334]: sel.css(‘p:nth-child(1)‘).extract()
Out[334]: []

In [335]: sel.css(‘p:nth-child(2)‘).extract()
Out[335]: [‘<p>2p</p>‘]

In [336]: sel.css(‘p:nth-child(3)‘).extract()
Out[336]: [‘<p>3p</p>‘]

In [337]: sel.css(‘p:nth-last-child(1)‘).extract()
Out[337]: [‘<p>3p</p>‘]

In [338]: sel.css(‘p:nth-last-child(2)‘).extract()
Out[338]: [‘<p>2p</p>‘]

In [339]: sel.css(‘p:nth-last-child(3)‘).extract()
Out[339]: []

3.2 特别指代

In [340]: sel.css(‘a:first-child‘).extract()
Out[340]: [‘<a>1a</a>‘]

In [341]: sel.css(‘a:last-child‘).extract()
Out[341]: []

In [342]: sel.css(‘p:first-child‘).extract()
Out[342]: []

In [343]: sel.css(‘p:last-child‘).extract()
Out[343]: [‘<p>3p</p>‘]

3.3 上述 -child 修改为 -of-type ,仅对 过滤后的相应子节点列表 进行计数

4.Xpath 第几个子节点

In [344]: sel.xpath(‘//div‘).extract()
Out[344]: [‘<div>\n    <a>1a</a>\n    <p>2p</p>\n    <p>3p</p>\n</div>‘]

In [345]: sel.xpath(‘//div/*‘).extract()
Out[345]: [‘<a>1a</a>‘, ‘<p>2p</p>‘, ‘<p>3p</p>‘]

In [346]: sel.xpath(‘//div/node()‘).extract()
Out[346]: [‘\n    ‘, ‘<a>1a</a>‘, ‘\n    ‘, ‘<p>2p</p>‘, ‘\n    ‘, ‘<p>3p</p>‘, ‘\n‘]

In [347]: sel.xpath(‘//div/a‘).extract()
Out[347]: [‘<a>1a</a>‘]

In [348]: sel.xpath(‘//div/p‘).extract()
Out[348]: [‘<p>2p</p>‘, ‘<p>3p</p>‘]

In [349]:

In [349]: sel.xpath(‘//div/a[1]‘).extract()
Out[349]: [‘<a>1a</a>‘]

In [350]: sel.xpath(‘//div/a[last()]‘).extract()
Out[350]: [‘<a>1a</a>‘]

In [351]:

In [351]: sel.xpath(‘//div/p[1]‘).extract()    #相当于过滤后的子节点列表
Out[351]: [‘<p>2p</p>‘]

In [352]: sel.xpath(‘//div/p[last()]‘).extract()
Out[352]: [‘<p>3p</p>‘]

In [353]: sel.xpath(‘//div/p[last()-1]‘).extract()
Out[353]: [‘<p>2p</p>‘]

In [354]:

In [354]: sel.xpath(‘//div/*[1]‘).extract()        #完整子节点列表
Out[354]: [‘<a>1a</a>‘]

In [355]: sel.xpath(‘//div/*[last()]‘).extract()
Out[355]: [‘<p>3p</p>‘]

In [356]:

In [356]: sel.xpath(‘//div/node()[1]‘).extract()   #包括纯文本
Out[356]: [‘\n    ‘]

In [357]: sel.xpath(‘//div/node()[last()]‘).extract()
Out[357]: [‘\n‘]

原文地址:https://www.cnblogs.com/my8100/p/8984719.html

时间: 2024-10-28 11:17:57

CSS/Xpath 选择器 第几个子节点/父节点/兄弟节点的相关文章

easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选

最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网上百度了很多资料,都没有完全符合自己业务场景的,所以就自己动手写咯. 先说一下自己的业务需求: 1.选中节点,上级以及所有直系上级节点自动选中,所有下级子孙节点全部自动选中: 2.取消选择节点,如果兄弟节点都未选择,则上级以及所有直系上级节点自动取消选择,所有下级子孙节点全部取消选中. 这里说一下c

DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点

Posted on 2012-01-10 14:02 marcozh 阅读(1738) 评论(3) 编辑 收藏 最近用了Dev的Treelist控 件,其中用到了拖动方法.众所周知的是,Dev的Treelist封装了原先用递归才能实现的树状显示,所以写代码非常方便.以前我做树形表,还需要一些 辅助字段如Level.HasChild等,维护起来也有点小麻烦,现在只要一个ParentId字段就够了,只要设置一下KeyFieldName和 ParentFieldName就可以了. 如: tlCateg

Xpath string()提取多个子节点中的文本

<div> <ul class="show"> <li>275万购昌平邻铁三居 总价20万买一居</li> <li>00万内购五环三居 140万安家东三环</li> <li>北京首现零首付楼盘 53万购东5环50平</li> <li>京楼盘直降5000 中信府 公园楼王现房</li> </ul> </div> 我想要把所有li标签中的文本提取出

xpath选择器使用

简单说,xpath就是选择XML文件中节点的方法. 所谓节点(node),就是XML文件的最小构成单位,一共分成7种. - element(元素节点)- attribute(属性节点)- text (文本节点)- namespace (名称空间节点)- processing-instruction (处理命令节点)- comment (注释节点)- root (根节点) xpath可以用来选择这7种节点.不过,下面的笔记只涉及最常用的第一种element(元素节点),因此可以将下文中的节点和元素

Css3之高级-1 Css复杂选择器(兄弟选择器 、属性选择器、伪类选择器、伪元素选择器)

一.兄弟选择器 相邻兄弟选择器 - 相邻兄弟选择器匹配指定元素的相邻兄弟元素 - 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器 - 使用加号(+)作为结合符 通用兄弟选择器 - 通用兄弟选择器匹配某元素后面的所有兄弟元素 - 使用符号(~)作为结合符,即 element1~element2 - 两种元素必须拥有相同的父元素,但是element2不必直接紧随element1 二.属性选择器 属性选择器 - 属性选择器能够将元素附带的属性用于选择器中,从而对带

css笔记-选择器详解

css笔记-选择器详解 CSS通过选择器来定位要应用样式的元素. 下面对所有的选择器做了一个解释(CSS为版本号). CSS选择器详解 选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname id="firstname" 的所有元素. 1 * * 选择所有元素. 2 element p 选择所有 <p> 元素. 1 element,element div,p 选择所有

css以及选择器基础

CSS样式基础了解1.css基础语法CSS样式的出现是为了将内容和表现分离极大的提高了工作效率内联样式(在 HTML 元素内部)<p style="margin-left: 10px:margin-right:10px"></p><标签名 style="属性:属性值;属性:属性值;" 属性="属性值"></标签名>内部样式表(位于 <head> 标签内部)<style type=&

【css】css常用选择器

css常用选择器 * 通配选择器 选择文档中所以HTML元素 E 元素选择器  选择指定类型的HTML元素 #id ID选择器  选择指定ID属性值为"id"的任意类型元素 .class 类选择器   选择指定class属性值为"class"的任意类型的任意多个元素 selector1,selectorN 群组选择器 将每一个选择器匹配的元素集合并 E F 后代选择器(包含选择器)  选择匹配的F元素,且匹配的F元素被包含在匹配的E元素内 E>F 子选择器 选

(转载)css高级选择器

以前由于考虑到IE6等浏览器的兼容属性,常常对于高级的css选择符不感兴趣,最近开始,发现前端方面的IE6其实已经逐渐的消失了,学会用css3的高级选择器,可以起到事半功倍的效果,所以以后将会加强这方面的学习和积累一些经验,今天重温以前被人用过的很多选择器,当然有一些也许你还不知道,没关系,从现在开始学习吧. CSS是对网页设计师可用的最强大的工具之一.使用它我们可以在几分钟内改变一个网站的界面,而不用改变页面的标签.但是尽管事实上,我们每个人也 都意识到了它是有用的,CSS 选择器远未发挥它们