一 子节点

1 find方法

1.1 代码

html = '''
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul>
</div>
'''from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
# find()方法,此时传入的参数是CSS选择器
lis = items.find('li')
print(type(lis))
print(lis)

1.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<class 'pyquery.pyquery.PyQuery'>
<ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li>

1.3 说明

首先,我们选取class为list的节点,然后调用了find()方法,传入CSS选择器,选取其内部的li节点,最后打印输出。可以发现,find()方法会将符合条件的所有节点选择出来,结果的类型是PyQuery类型。

其实find()的查找范围是节点的所有子孙节点,而如果我们只想查找子节点,那么可以用children()方法

2 children方法

2.1 代码

html = '''
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
# 只想查找子节点,那么可以用children()方法
lis = items.children()
print(type(lis))
print(lis)

2.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li>

3 筛选器

3.1 代码

html = '''
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
# 可以向children()方法传入CSS选择器.active:
lis = items.children('.active')
print(lis)

3.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li>

3.3 说明

输出结果已经做了筛选,留下了class为active的节点。

二 父节点

1 parent反复

1.1 代码

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
# 用parent()方法来获取某个节点的父节点
container = items.parent()
print(type(container))
print(container)

1.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<class 'pyquery.pyquery.PyQuery'>
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>

1.3 说明

这里我们首先用.list选取class为list的节点,然后调用parent()方法得到其父节点,其类型依然是PyQuery类型。

这里的父节点是该节点的直接父节点,也就是说,它不会再去查找父节点的父节点,即祖先节点。

但是如果想获取某个祖先节点,该怎么办呢?这时可以用parents()方法

2 parents方法

2.1 代码

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)

2.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<class 'pyquery.pyquery.PyQuery'>
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>

2.3 说明

可以看到,输出结果有两个:一个是class为wrap的节点,一个是id为container的节点。也就是说,parents()方法会返回所有的祖先节点。

3 筛选器

3.1 代码

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')# parents()方法传入CSS选择器,这样就会返回祖先节点中符合CSS选择器的节点
parent = items.parents('.wrap')
print(parent)

3.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div>

三 兄弟节点

1 siblings

1.1 代码

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 这里首先选择class为list的节点内部class为item-0和active的节点,也就是第三个li节点。
# 那么,很明显,它的兄弟节点有4个,那就是第一、二、四、五个li节点。
li = doc('.list .item-0.active')
print(li.siblings())

1.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<li class="item-1"><a href="link2.html">second item</a></li><li class="item-0">first item</li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li>

1.3 说明

可以看到,这正是我们刚才所说的4个兄弟节点。

2 筛选器

2.1 代码

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
</div>
'''from pyquery import PyQuery as pq
doc = pq(html)
# 这里首先选择class为list的节点内部class为item-0和active的节点,也就是第三个li节点。
# 那么,很明显,它的兄弟节点有4个,那就是第一、二、四、五个li节点。
li = doc('.list .item-0.active')
# 如果要筛选某个兄弟节点,我们依然可以向siblings方法传入CSS选择器,
# 这样就会从所有兄弟节点中挑选出符合条件的节点了
print(li.siblings('.active'))

2.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/4_3.py
<li class="item-1 active"><a href="link4.html">fourth item</a></li>

2.3 说明

我们筛选了class为active的节点,通过刚才的结果可以观察到,class为active的兄弟节点只有第四个li节点,所以结果应该是一个。

爬虫pyquery查找节点相关推荐

  1. python网络爬虫——pyquery的使用(六)

    python网络爬虫--pyquery的使用(六) pyquery的使用 一.pyquery的介绍 二.pyquery的使用 1.初始化工作 2.查找节点 3.遍历 4.获取信息 5.节点操作 6.伪 ...

  2. python爬虫——Pyquery库

    Pyquery库并非python标准库,所以需要下载:pip install pyquery Pyquery是一个类似jquery(一个js库)的库,使用 lxml 进行快速 xml 和 html 操 ...

  3. 一起学爬虫——PyQuery常用用法总结

    什么是PyQuery PyQuery是一个类似于jQuery的解析网页工具,使用lxml操作xml和html文档,它的语法和jQuery很像.和XPATH,Beautiful Soup比起来,PyQu ...

  4. xdocument查找节点值_二叉查找树(java)

    一棵二叉查找树(BST)是一颗二叉树,其中每个节点都含有一个Comparable的键且每个节点的键(以及相关的值)都大于其左子树中的任意节点的键而小于右子树的任意结点的键. 数据表示 和链表一样,我们 ...

  5. 二叉树C++ | 查找节点(中序搜索)_5

    查找节点(中序搜索) /* C++ program to find Inorder successor in a BST */ #include<iostream> using names ...

  6. jquery 父元素相邻元素_Jquery中几种查找节点的方法

    Jquery中有多种可以查找节点的方法,今天这篇文章就说几种简单点的,也在日常中经常用到的. jQuery parent() 方法 parent():查找并返回被选元素的父元素 语法: $(selec ...

  7. python spider是什么_python分布式爬虫中spider_Worker节点指的是什么

    python分布式爬虫中spider_Worker节点指的是什么 发布时间:2020-11-30 14:07:27

  8. JQueryDOM之查找节点

    查找节点 1.节点有哪些?-->元素节点.属性节点.文本节点 查找元素节点: <--通过jQuery选择器,直接可以获取到节点元素.-->例1:查找元素节点p返回p内的文本内容$(& ...

  9. java document创建节点_javasript 的DOM 节点操作:创建,插入,删除,复制以及查找节点...

    DOM 含义: DOM 是文档对象模型(Document Object Model) 是一种基于浏览器编程的一套API 接口,我W3C 出台推荐的标准.其赋予了JS 操作节点的能力,当网页被加载时,浏 ...

  10. JS----DOM节点操作:创建 ,插入,删除,复制,查找节点

    摘自:https://blog.csdn.net/torrex/article/details/54376633 一.创建节点.追加节点 1.createElement(标签名)创建一个元素节点(具体 ...

最新文章

  1. android 生成签名命令
  2. LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
  3. Redis的Expire与Setex
  4. 【报错笔记】项目中使用ArrayList<>报错:‘<>’operator is not allowed for source level below 1.7
  5. 在ElementUI中改变el-table中的el-table-column样式
  6. 插件式架构设计实践:插件式系统架构设计简介
  7. Android技术专家 高焕堂 推荐这本书
  8. 【计算机视觉入门案例】手写数字识别:Keras深度学习库
  9. win10双显卡开机黑屏时间长
  10. 论文笔记 EMNLP 2018|Jointly Multiple Events Extraction via Attention-based Graph Information Aggregation
  11. 问题“ConnectionString属性尚未初始化”之解决办法
  12. 如何深入学习JAVA
  13. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 WMT数据处理
  14. 污水中去除重金属的工艺解析—离子交换树脂
  15. 计算机网络哪个学校好厦门,厦门较好的的计算机学校有哪几间
  16. matlab-数学运算
  17. cmd命令 Java实现cmd命令打包
  18. 为甚TCP的3次握手不是2次握手(思考实验)
  19. django.core.serializers.base.DeserializationError: Problem installing fixture
  20. python学习笔记之代码规范

热门文章

  1. WIN下静默安装MSI文件
  2. cad编辑节点快捷键是什么_cad删除快捷键(cad删除节点快捷键)
  3. 利用 yEd 软件做元数据管理
  4. Nacos源码系列之服务发现(二)
  5. [Codeforces730A. Toda 2] STL模拟+Skills
  6. 阿里资深架构师的学习之路
  7. ios 裁剪圆形头像_iOS如何将图片裁剪成圆形
  8. ie浏览器点击无法打开问题【亲测有效哦】
  9. linux获取本机ip地址函数,Linux编程获取本机IP地址
  10. 独家 | 想成为一名数据科学家?你得先读读这篇文章