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. animation 动画

    语法 animation: name duration timing-function delay iteration-count direction fill-mode play-state ani ...

  2. vue常用手册

    1.搭建vue的开发环境: 1.必须要安装node.js 2.安装vue的脚手架工具 官方命令行工具 npm install --global vue-cli 3.新建项目 vue init webp ...

  3. linux下串口函数

    tcgetattr(), tcsetattr(), tcdrain(),tcflush(), tcflow(), tcsendbreak(),cfmakeraw(), cfgetispeed(),cf ...

  4. 20175221 《Java程序设计》第5周学习总结

    20175221   <Java程序设计>第5周学习总结 教材学习内容总结 接口的定义 接口声明:interface 接口名 接口体中只可以有常量,而没有变量 接口体中只有抽象方法(可省略 ...

  5. saltstack主机管理项目:主机管理项目需求分析(一)

    1.场景: 我现在又一台裸机要实现一下任务 2.配置管理: 1.装上nginx,mysql 2.nginx用我指定的配置文件 3.mysql用户 4.设置一个默认的数据库访问权限 5.启动mysql ...

  6. 工作任务: 批量处理wav音频文件--shell脚本

    #!/bin/bash # 处理音频 deal_with_wav() { ) do ) do # gd1_music ./tool/fixbeam2 -c res/fixbeam2.bin -b -i ...

  7. [物理学与PDEs]第1章第6节 电磁场的标势与矢势 6.2 电磁场的标势与矢势

    1.  标势.矢势:  $$\beex \bea \Div{\bf B}=0&\ra \exists\ {\bf A},\st {\bf B}=\rot{\bf A},\\ \rot{\bf ...

  8. [物理学与PDEs]第1章第1节 引言

    1. 电动力学研究的对象是电磁场, 研究电磁场的基本属性---运动规律及它和带电物质的相互作用. 2. 场, 物质的一种存在方式. 3. Maxwell 方程组是电动力学中的基本方程, 是一切有关电磁 ...

  9. burp suite 基础入门超详细教程

    介绍: 都是我个人了解到的信息,,分享给大家 欢迎指正 burp suite 被誉为web安全工具中的瑞士军刀. 大家知道,瑞士军刀,都是体积小,功能强悍,.西方军队的标配.说这么多,只是想强调这款工 ...

  10. JDK8- interface接口可以写方法体了-- 惊 dt.jar包等

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. == 一个类实现某个接口,必须重写接口中 ...