python中pyquery的使用(初始化,css选择器,查找节点,遍历)

1.初始化

与Beautiful Soup一样,需要传入HTML文本来初始化一个PyQuery对象。它的初始化方式有多种。直接传入字符串、传入URL、传入文件名,等等。

  • 字符串初始化
from pyquery import PyQuery
html = '''
<div>
<ul>
<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">three 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>
'''
pq = PyQuery(html)
print(pq('span'))

在这里插入图片描述

  • URL初始化
from pyquery import PyQuery
doc = PyQuery(url='https://blog.csdn.net/weixin_43670190')
print(doc('title'))

在这里,PyQuery对象会先请求URL,然后再使用请求道的HTML来初始化对象,这相当于用王爷的源代码以字符串的形式传递给PyQuery类来初始化。
在这里插入图片描述

  • 文件初始化
from pyquery import PyQuery
doc = PyQuery(filename='demo.html')
print(doc('li'))

这需要一个本地HTML文件,它的内容就是待解析的HTML字符串。

2.基本css选择器

from pyquery import PyQuery
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">three 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>
'''
pq = PyQuery(html)
# 选取id为container节点下的class为list的节点下的所有li节点
print(pq('#container .list li'))
# 类型为PyQuery类型
print(type(pq('#container .list li')))

在这里插入图片描述

3.查找结点

  • 子节点

查找子节点时,需要用到find()方法,传入的参数是css选择器。

from pyquery import PyQuery
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">three 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>
'''
doc = PyQuery(html)
# 选取class为list的节点
item = doc('.list')
# 调用find()方法获取class为list的节点下的所有li节点
lis = item.find('li')
print(lis)

在这里插入图片描述
find()方法是查找范围内的所有子孙节点,若只想要查找子节点,可以这样:

doc = PyQuery(html)
item = doc('.list')
lis = item.children()
lis1 = item.children('.active') # 筛选出子节点中class为active的节点
print(lis)

在这里插入图片描述

  • 父节点

使用parent()方法来获取某个节点的父节点。

from pyquery import PyQuery
html = '''
<div class="warp">
<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">three 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>
'''
doc = PyQuery(html)
item = doc('.list')
lis = item.parent()
print(lis)

在这里插入图片描述
parent()方法是选择某节点的直接父节点。这里是获取了class为list节点的直接父节点。
如果想要获取祖先节点,要用parents()方法:

doc = PyQuery(html)
item = doc('.list')
lis = item.parents()
print(lis)

在这里插入图片描述
这里是获取了class为list的节点的祖先节点。可以看见有两个结果,一个是class为warp的节点,另一个是id为container的节点。
若是只想要获取某个祖先节点的花,可以向parents()方法中传入css选择器:

doc = PyQuery(html)
item = doc('.list')
lis = item.parents('#container')
print(lis)

在这里插入图片描述

  • 兄弟节点

使用siblings()方法可以获取某节点的所有兄弟节点。

from pyquery import PyQuery
html = '''
<div class="warp">
<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">three 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>
'''
doc = PyQuery(html)
# 选择class为list的节点中的class为item-0和active的节点
item = doc('.list .item-0.active')
lis = item.siblings()
print(lis)

在这里插入图片描述
如只想选择某个兄弟节点,那么和parents()方法一样,可以向siblings()方法中传入css选择器:

doc = PyQuery(html)
# 选择class为list的节点中的class为item-0和active的节点
item = doc('.list .item-0.active')
lis = item.siblings('.active')
print(lis)

在这里插入图片描述

4.遍历

pyquery的选择结果可能是单个节点,也可能是多个节点。对于单个节点可以直接打印输出,而对于多个节点的结果可以遍历来获取。

from pyquery import PyQuery
html = '''
<div class="warp">
<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">three 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>
'''
doc = PyQuery(html)
item = doc('li').items()
for li in item:
    print(li)

在这里插入图片描述
在调用items()方法后,会得到一个生成器,遍历就可以逐个得到li节点对象,类型都是PyQuery类型。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天意不可违.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值