python中pyquery的使用(获取信息、节点操作、伪类选择器)

5.获取信息

  • 获取属性

提取到某个PyQuery类型的节点后,可以调用attr()方法来获取属性。

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>
'''
pq = PyQuery(html)
a = pq('.item-0.active a')
sx = a.attr('href')
print(sx)

首先选取class为item-0和active的节点,再选择其中的a节点。然后调用attr()方法,在方法中传入属性的名称。
在这里插入图片描述
如想要获取多个元素就得使用遍历,比如要获取所有li节点的属性:

pq = PyQuery(html)
cla = pq('li')
sx = cla.attr('class')
print(sx)

如果只是这样,那么返回的仅仅只是第一个li节点的属性。

pq = PyQuery(html)
cla = pq('li')
for li in cla.items():
    print(li.attr('class'))

此时,获取的便是所有li节点的属性了。
在这里插入图片描述

  • 获取文本

在获取某个节点后,可以调用text()方法来获取文本。

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>
'''
pq = PyQuery(html)
cla = pq('li')
print(cla.text())

在这里插入图片描述
若是想获取HTML文本,那么调用html()方法即可。html()方法返回的是第一个节点内部的HTML文本,而text()方法返回的是所有节点的文本,中间使用空格间隔,是一个字符串。
如果得到的结果是多个节点,又想要获取每个节点的HTML文本,那么可以使用items()进行遍历。

6.节点操作

pyquery提供了一系列方法来对节点进行动态修改,比如为某个节点添加一个class,移除某个节点等。

  • addClass() 和 removeClass()
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>
'''
pq = PyQuery(html)
li = pq('.item-0.active')
print(li)
# 删除li节点中的active这个class
li.removeClass('active')
print(li)
# 添加li节点中的active这个class
li.addClass('active')
print(li)

在这里插入图片描述

  • attr()、text()和html()
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>
'''
pq = PyQuery(html)
li = pq('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.text('changed text')
print(li)
li.html('<span>changed text</span>')
print(li)

由上可知,attr()方法只传入第一个参数的属性名,则是获取这个属性值,如果传入第二个参数可以修改属性值。text()和html()如果不传参数,就是获取文本和HTML文本,如果传入参数,则是进行修改。
在这里插入图片描述

  • remove()
html1 = '''
<div class='wrap'>
    Hello, World
<p>This is a paragraph.</p>
</div>
'''
from pyquery import PyQuery
doc = PyQuery(html1)
wrap = doc('.wrap')
wrap.find('p').remove()
print(wrap.text())

在只想提取Hello,World这个字符串时,可先选择p节点,然后使用remove()去掉p节点,然后再调用text()就可以提取出想要的内容。

7.伪类选择器

CSS选择器支持多种多样的伪类选择器,例如选择第一个节点、最后一个节点、奇偶数节点、包含某一文本的节点等。

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>
'''
from pyquery import PyQuery
doc = PyQuery(html)
# 选择第一个li节点
li = doc('li:first-child')
# 选择最后一个li节点
li = doc('li:last-child')
# 选择第二个li节点
li = doc('li:nth-child(2)')
# 选择第三个li之后的li节点
li = doc('li:gt(2)')
# 选择偶数位置的li节点
li = doc('li:nth-child(2n)')
# 选择包含second文本的li节点
li = doc('li:contains(second)')
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天意不可违.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值