爬虫

Pyquery的查询函数

文 / 大炳哥 来源 / 原创 阅读 / 3499 2年前

这篇文章的目标只有一个——学习Pyquery当中的查询函数

首先我们看一下 在Pyquery中都有哪些查询函数

在Pyquery中常用的查询函数有下列五种,分别是: 1. finde() 2. children() 3. parent() 4. parents() 5. siblings()

这五种查询函数,和他们在JQuery中的用法完全一样,都是根据不同的查询的范围而设定的.

他们虽然查询范围不同,但是都使用CSS选择器进行元素的过滤、定位,所以在这一点上它们的功能实现方式都是相同的。

OK,简单了解他们的使用方式后,那么下面,我们来详细地学习第一个查询函数 find。

1.1 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>

1.2 children()方法查找子节点

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>

1.3 parent()方法查找所有的父节点

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>

1.4 parents()方法查找所有的祖先节点

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>

1.5 siblings()方法查找所有的兄弟节点

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

评论

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

站点声明:本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

© 2019 The Pride & Joy of an Artisan. · Designed By duoguyu · Powered By Django京ICP备19006898号-1
相关侵权、举报、投诉及建议等,请发E-mail:lemont0086@163.com

友情链接: 大炳哥的博客 逐梦个人博客 微微的博客 daixu 十年之约