爬虫pyquery查找节点
一 子节点
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查找节点相关推荐
- python网络爬虫——pyquery的使用(六)
python网络爬虫--pyquery的使用(六) pyquery的使用 一.pyquery的介绍 二.pyquery的使用 1.初始化工作 2.查找节点 3.遍历 4.获取信息 5.节点操作 6.伪 ...
- python爬虫——Pyquery库
Pyquery库并非python标准库,所以需要下载:pip install pyquery Pyquery是一个类似jquery(一个js库)的库,使用 lxml 进行快速 xml 和 html 操 ...
- 一起学爬虫——PyQuery常用用法总结
什么是PyQuery PyQuery是一个类似于jQuery的解析网页工具,使用lxml操作xml和html文档,它的语法和jQuery很像.和XPATH,Beautiful Soup比起来,PyQu ...
- xdocument查找节点值_二叉查找树(java)
一棵二叉查找树(BST)是一颗二叉树,其中每个节点都含有一个Comparable的键且每个节点的键(以及相关的值)都大于其左子树中的任意节点的键而小于右子树的任意结点的键. 数据表示 和链表一样,我们 ...
- 二叉树C++ | 查找节点(中序搜索)_5
查找节点(中序搜索) /* C++ program to find Inorder successor in a BST */ #include<iostream> using names ...
- jquery 父元素相邻元素_Jquery中几种查找节点的方法
Jquery中有多种可以查找节点的方法,今天这篇文章就说几种简单点的,也在日常中经常用到的. jQuery parent() 方法 parent():查找并返回被选元素的父元素 语法: $(selec ...
- python spider是什么_python分布式爬虫中spider_Worker节点指的是什么
python分布式爬虫中spider_Worker节点指的是什么 发布时间:2020-11-30 14:07:27
- JQueryDOM之查找节点
查找节点 1.节点有哪些?-->元素节点.属性节点.文本节点 查找元素节点: <--通过jQuery选择器,直接可以获取到节点元素.-->例1:查找元素节点p返回p内的文本内容$(& ...
- java document创建节点_javasript 的DOM 节点操作:创建,插入,删除,复制以及查找节点...
DOM 含义: DOM 是文档对象模型(Document Object Model) 是一种基于浏览器编程的一套API 接口,我W3C 出台推荐的标准.其赋予了JS 操作节点的能力,当网页被加载时,浏 ...
- JS----DOM节点操作:创建 ,插入,删除,复制,查找节点
摘自:https://blog.csdn.net/torrex/article/details/54376633 一.创建节点.追加节点 1.createElement(标签名)创建一个元素节点(具体 ...
最新文章
- android 生成签名命令
- LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
- Redis的Expire与Setex
- 【报错笔记】项目中使用ArrayList<>报错:‘<>’operator is not allowed for source level below 1.7
- 在ElementUI中改变el-table中的el-table-column样式
- 插件式架构设计实践:插件式系统架构设计简介
- Android技术专家 高焕堂 推荐这本书
- 【计算机视觉入门案例】手写数字识别:Keras深度学习库
- win10双显卡开机黑屏时间长
- 论文笔记 EMNLP 2018|Jointly Multiple Events Extraction via Attention-based Graph Information Aggregation
- 问题“ConnectionString属性尚未初始化”之解决办法
- 如何深入学习JAVA
- 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 WMT数据处理
- 污水中去除重金属的工艺解析—离子交换树脂
- 计算机网络哪个学校好厦门,厦门较好的的计算机学校有哪几间
- matlab-数学运算
- cmd命令 Java实现cmd命令打包
- 为甚TCP的3次握手不是2次握手(思考实验)
- django.core.serializers.base.DeserializationError: Problem installing fixture
- python学习笔记之代码规范