这篇文章的目标只有一个——学习Pyquery当中的查询函数
首先我们看一下 在Pyquery中都有哪些查询函数
在Pyquery中常用的查询函数有下列五种,分别是: 1. finde() 2. children() 3. parent() 4. parents() 5. siblings()
这五种查询函数,和他们在JQuery中的用法完全一样,都是根据不同的查询的范围而设定的.
他们虽然查询范围不同,但是都使用CSS选择器进行元素的过滤、定位,所以在这一点上它们的功能实现方式都是相同的。
OK,简单了解他们的使用方式后,那么下面,我们来详细地学习第一个查询函数 find。
作用:用来查找所有节点
html = '''
<div id="container">
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list" id="list-1">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 获取ul标签
ul_item = doc('.list')
print(type(ul_item))
print(ul_item)
# 查找ul >> li标签
li_list = ul_item.find('li')
print(type(li_list))
print(li_list)
# 查找ul >> li >> a标签
a = li_list.find('a')
print(type(a))
print(a)
输出结果:
// 获取ul标签
<class 'pyquery.pyquery.PyQuery'>
<ul class="list" id="list-1">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
// 查找ul >> li标签
<class 'pyquery.pyquery.PyQuery'>
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
// 查找ul >> li >> a标签
<class 'pyquery.pyquery.PyQuery'>
<a href="http://www.bylemon.cn"> Foo</a><a href="#">Bar</a>
html = '''
<div id="container">
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
# find查找ul标签
ul_item = doc.find('.list')
print(type(ul_item))
print(ul_item)
# children查找class='list'的ul标签
ul_item = doc.children('.list')
print(type(ul_item))
print(ul_item)
# children查找class='content'的div
ul_item = doc.children('.content')
print(type(ul_item))
print(ul_item)
# children查找子元素
ul_item = doc.children()
print(type(ul_item))
print(ul_item)
输出结果:
// find查找ul标签:
<class 'pyquery.pyquery.PyQuery'>
<ul class="list" id="list-1">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
// children查找class='list'的ul标签:
<class 'pyquery.pyquery.PyQuery'>
// children查找class='content'的div:
<class 'pyquery.pyquery.PyQuery'>
<div class="content">
<ul class="list" id="list-1">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
// children子元素:
<class 'pyquery.pyquery.PyQuery'>
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list" id="list-1">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
html = '''
<div id="container">
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 先定位到li标签
li_list = doc('li')
print(li_list)
# 获取li的父节点
item = li_list.parent()
print(item)
输出结果:
// 先定位到li标签
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
// 获取li的父节点
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
html = '''
<div id="container">
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 先定位到li标签
li_list = doc('li')
print(li_list)
# 获取li的祖先节点
item = li_list.parents()
print(item)
# 对获取li的祖先节点,进行删选 只获取class='content'的祖先节点
item = li_list.parents('.content')
print(item)
输出结果:
// 先定位到li标签
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
// 获取li的祖先节点
<div id="container">
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
</div><div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
// 对获取li的祖先节点,进行删选 只获取class='content'的祖先节点
<div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
</ul>
</div>
html = '''
<div id="container">
<div class="title">
<h3>Pyquery</h3>
</div>
<div class="content">
<ul class="list">
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
<li class="element1 active"><a href="#">Bar</a></li>
<li class="element2"><a href="http://www.bylemon.cn"> Foo</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 首先定位到class='element0'的li节点
li_ele0 = doc('.element0')
print(li_ele0)
# 获取li_ele0的的兄弟节点
li_siblings = li_ele0.siblings()
print(li_siblings)
# 获取li_ele0的指定兄弟节点
li_siblings = li_ele0.siblings('.active')
print(li_siblings)
输出结果:
// 首先定位到class='element0'的li节点
<li class="element0"><a href="http://www.bylemon.cn"> Foo</a></li>
// 获取li_ele0的的兄弟节点
<li class="element1 active"><a href="#">Bar</a></li>
<li class="element2"><a href="http://www.bylemon.cn"> Foo</a></li>
// 获取li_ele0的指定兄弟节点
<li class="element1 active"><a href="#">Bar</a></li>
4