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 选择器 第几个子节点/父节点/兄弟节点的更多相关文章

  1. [uiautomator篇] 找父亲节点和其他兄弟节点

    https://testerhome.com/topics/1250 Appium [已解决] UiSelector 如何根据节点定位到父节点 / 兄弟节点? liqing380 · 发布于 2014 ...

  2. css结构选择器组合使用,选择父元素中多个子元素中某一段元素

    nth-of-type()和nth-child()写法一样,这里只用nth-of-type()演示,习惯type 直接上代码 /* 从前向后选择,第6个开始 */ li:nth-of-type(n+6 ...

  3. Selenium(九):Xpath选择器

    1. Xpath选择器 1.1 Xpath语法简介 前面我们学习了CSS选择元素. 大家可以发现非常灵活.强大. 还有一种灵活.强大的选择元素的方式,就是使用Xpath表达式. XPath (XML ...

  4. 突破css选择器的局限,实现一个css地址选择器?

    首先看一个效果,注意地址栏的变化 然后思考一下,用css如何实现? css选择器的局限 选择器是css中的一大特色,用于选择需要添加样式的元素. 选择器的种类有很多,比如 元素选择器 p {color ...

  5. JS获取子节点、父节点和兄弟节点的方法实例总结

    转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...

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

    最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网 ...

  7. Oracle递归查询父子兄弟节点

      1.查询某节点下所有后代节点(包括各级父节点) 1 // 查询id为101的所有后代节点,包含101在内的各级父节点 2 select t.* from SYS_ORG t start with ...

  8. 常用xpath选择器和css选择器总结

    xpath选择器 表达式 说明 article 选取所有article元素的所有子节点 /article 选取根元素article article/a 选取所有属于article的子元素的a元素 // ...

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

    <div> <ul class="show"> <li>275万购昌平邻铁三居 总价20万买一居</li> <li>00 ...

随机推荐

  1. poj2778(AC自动机+矩阵快速幂)

    题意:给你n个字符串,问你长度为m的字符串且字符串中不含有那n个子串的字符串的数量 解题思路:这道题一开始就不太懂,还以为是组合数学的题目,后面看了别人的博客,才知道这是属于AC自动机的另一种用法,是 ...

  2. python控制台输出带颜色的文字方法

    #格式: 设置颜色开始 :\033[显示方式;前景色;背景色m   注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个:另外由于表示三个参数不同含义的数值都是唯一的没有 ...

  3. redis - Sentinel 和 cluster

    redis哨兵集群 引入 上回说到redis主从同步时,master(主库)如果宕机了怎么解决... 我给出了一个手动解决的办法! 但实际上,如果你配置了Sentinel,它能自动发现master宕机 ...

  4. 【XSY2921】yja 拉格朗日乘法

    题目描述 在平面上找 \(n\) 个点,要求这 \(n\) 个点离原点的距离分别是 \(r_1,r_2,\ldots,r_n\),最大化这 \(n\) 个点构成的土包的面积.这些点的顺序任意. \(n ...

  5. jatoolsprinter web打印控件直接打印不弹出

    1.功能 主要是实现页面点击按钮,不弹窗,直接打印. 可以指定某个打印机打印 可以使用默认打印机打印 2.版本 主要有:免费版跟付费版 免费版官网:http://printfree.jatools.c ...

  6. MySQL INSERT UPATE DELETE语句

    插入完整一行 INSERT INTO customers(cust_name,cust_contact,cust_email,cust_address,cust_city,cust_state,cus ...

  7. Dubbo2.6.5+Nacos注册中心(代替Zookeeper)

    在上一节的小栗子的基础上,只需要更改两个地方 第一个:父工程的pom依赖增加 <!-- Dubbo Nacos registry dependency --> <dependency ...

  8. CSS之使用display:inline-block来布局

    css之display:inline-block布局 1.解释一下display的几个常用的属性值,inline , block, inline-block inline(行内元素): 使元素变成行内 ...

  9. 安装tftp

    #!/bin/bash # tftp install # 20180711 # 仅测试过操作系统 ubuntu 16.04 download_url='http://img.fe.okjiaoyu.c ...

  10. 基于STM32F1的时钟芯片DS1302驱动

    目录 DS1302.h源代码 DS1302.c源代码 DS1302.h源代码 /** ********************************************************* ...