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.Xpath 父节点/上一个下一个兄弟节点
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']
CSS/Xpath 选择器 第几个子节点/父节点/兄弟节点的更多相关文章
- [uiautomator篇] 找父亲节点和其他兄弟节点
https://testerhome.com/topics/1250 Appium [已解决] UiSelector 如何根据节点定位到父节点 / 兄弟节点? liqing380 · 发布于 2014 ...
- css结构选择器组合使用,选择父元素中多个子元素中某一段元素
nth-of-type()和nth-child()写法一样,这里只用nth-of-type()演示,习惯type 直接上代码 /* 从前向后选择,第6个开始 */ li:nth-of-type(n+6 ...
- Selenium(九):Xpath选择器
1. Xpath选择器 1.1 Xpath语法简介 前面我们学习了CSS选择元素. 大家可以发现非常灵活.强大. 还有一种灵活.强大的选择元素的方式,就是使用Xpath表达式. XPath (XML ...
- 突破css选择器的局限,实现一个css地址选择器?
首先看一个效果,注意地址栏的变化 然后思考一下,用css如何实现? css选择器的局限 选择器是css中的一大特色,用于选择需要添加样式的元素. 选择器的种类有很多,比如 元素选择器 p {color ...
- JS获取子节点、父节点和兄弟节点的方法实例总结
转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...
- easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选
最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网 ...
- Oracle递归查询父子兄弟节点
1.查询某节点下所有后代节点(包括各级父节点) 1 // 查询id为101的所有后代节点,包含101在内的各级父节点 2 select t.* from SYS_ORG t start with ...
- 常用xpath选择器和css选择器总结
xpath选择器 表达式 说明 article 选取所有article元素的所有子节点 /article 选取根元素article article/a 选取所有属于article的子元素的a元素 // ...
- Xpath string()提取多个子节点中的文本
<div> <ul class="show"> <li>275万购昌平邻铁三居 总价20万买一居</li> <li>00 ...
随机推荐
- vivado place30-378
AR# 60131 Vivado Placer - [Place 30-378] Input pin of input buffer has an illegal connection to a lo ...
- vue中@contextmenu在pc和mac中的区别
项目中有用到右键菜单,故用了@contextmenu,由于本人是用的PC电脑,所以一切正常, 但是有同事用mac测试了一下,问题随之而来,MAC上右键按下就触发了, PC上面是鼠标抬起才会触发,所以这 ...
- java 将保单数据 生成图片
主要代码:---------------------------------------------------------------- /** * 生成图片 * @param cellsValue ...
- C# 中ref与out关键字区别
ref 关键字通过引用传递的参数的内存地址,而不是值.简单点说就是在方法中对参数的任何改变都会改变调用方的基础参数中.代码举例: class RefExample { static void Meth ...
- LOJ #2719. 「NOI2018」冒泡排序(组合数 + 树状数组)
题意 给你一个长为 \(n\) 的排列 \(p\) ,问你有多少个等长的排列满足 字典序比 \(p\) 大 : 它进行冒泡排序所需要交换的次数可以取到下界,也就是令第 \(i\) 个数为 \(a_i\ ...
- Ceph分布式存储(luminous)部署文档-ubuntu18-04
Ceph分布式存储(luminous)部署文档 环境 ubuntu18.04 ceph version 12.2.7 luminous (stable) 三节点 配置如下 node1:1U,1G me ...
- 友盟冲突解决com.umeng.weixin.handler.UmengWXHandler cannot be cast to com.umeng.socialize.handler.UMWXHandler
删掉一个试试
- 1.2浅谈Spring-Spring结构
时隔很多天的我又回来....最近发展了一下自己的爱好,所以拖了很长时间. 前面我们从概念性上分析了spring的特性 这里我们附上Spring框架的结构图 我们简单的来说一些这个框架图 我们从下往上看 ...
- Java计算文件MD5值(支持大文件)
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.securit ...
- LFYZ-OJ ID: 1008 求A/B高精度值
思路 小数点前的部分可以通过m/n直接计算得出 小数点后的20位可通过循环进行快速计算,计算方法如下: m%=n m*=10 小数点后第i位为m/n,回到第1步 第3步后,如果m%n为0,说明已经除净 ...