pyquery库用法总结

一. 导入库

from pyquery import PyQuery as pq

二. 初始化

1.将url作为参数
doc = pq(url="http://cuiqingcai.com")
print(doc('title'))
# output:<title>静觅丨崔庆才的个人博客</title>&#13;
2.将字符串作为参数
html = '''
<div class='wrap'>
<div id='container1'>
<ul class='list'>
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
</ul>
</div>
</div>
<div id='container2'>
<ul class='list'>
<li class="item-3">first item</li>
<li class="item-4">second item</li>
</ul>
</div>

'''
doc = pq(html)
print(doc('li'))
'''output:
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
<li class="item-3">first item</li>
<li class="item-4">second item</li>
'''
3.将文件作为参数
doc2 = pq(filename="demo.html")
print(doc2("li"))

三. 查找节点

补充:基本CSS选择器
# container表示选择id为container的节点; .list表示选择属性为list的节点; li表示tag为li的节点; 
print('css选择器')
print(doc('#container1 .list li'))
'''output:
<li class="item-3">first item</li>
<li class="item-4">second item</li>
'''
  1. doc(’#container1 .list’):#container1 .list li有空格,表示先筛选出id='container1‘的标签,,再在其子标签中筛选属性为list的标签
  2. doc(’#container1.list’):#container1.list之间无空格,表示筛选出id='container1’且属性为list的标签
A.查找子节点
1.使用item.find()即可在子孙中找到对应tag的所有标签
print("子孙节点:")
item = doc('.list')
print(item.find('li'))
'''output:
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
<li class="item-3">first item</li>
<li class="item-4">second item</li>
'''
2.使用item.children()即可只查找儿子节点
print("儿子节点:")
print(item.children('li'))
'''output:
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
<li class="item-3">first item</li>
<li class="item-4">second item</li>
'''
B.查找父节点
1. 使用item.parent()即可查找某个节点的父节点
item = doc('.item-3')
print(item.parent())
'''output:
<ul class="list">
<li class="item-3">first item</li>
<li class="item-4">second item</li>
</ul>
'''
2. 使用item.parents()即可查找某个节点的祖先节点,括号内还可以使用选择器筛选
print("父节点:")
print(item.parents('#container1'))
'''output:
<div id="container1">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
</ul>
</div>
'''
C. 查找兄弟节点
# item.siblings()查找某个节点的兄弟节点(注意:两个.属性连在一起中间无空格表示同一个标签的多个属性)
print("兄弟节点")
print(item.find('.item-0.active').siblings())
print(item.find('.item-0.active').siblings('.item-1.active'))
'''output:
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0">first item</li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>

<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
'''

四. 获取信息

1.获取属性:a.attr(‘href’) / a.attr.href
print("获取属性")

aas = doc1('a')

for a in aas.items():
    print(a)
    print(a.attr.href)
    # print(a.attr('href'))
'''output:
<a href="link2.html">second item</a>
link2.html
<a href="link3.html">third item</a>
link3.html
<a href="link4.html">third item</a>
link4.html
'''
2.获取文本:a.text()可获得该节点中的纯文本(不包括html); a.html()可获得该节点的html文本
print("获取文本")
print(aas.text()) # 多个a节点会将其中文本合成一个字符串
print(doc1('.wrap li').html()) # 只会返回第一个节点内的html文本
'''output:
获取文本
second item third item third item
first item
'''

五.节点操作

1.添加和删除属性:addClass(),removeClass()
print("添加属性")
a = doc1('.item-0.active a')
a.add_class('cls')
print(a)
print("删除属性")
a.remove_class('cls')
print(a)
'''output:
添加属性
<a href="link3.html" class="cls">third item</a>
删除属性
<a href="link3.html" class="">third item</a>
'''
2.获取/修改属性:attr(), 获取/修改文本:text(), 获取/修改html:html();
# attr()若是只传入一个参数,则获得该属性值;若是传入第二个参数则是修改属性值(若无则添加)
# text()若是不传入参数,则获得该节点内的纯文本;传入参数则修改文本
# html()若是不传入参数,则是获得该节点内的html文本;传入参数则是修改html文本

print('修改属性, 文本, html文本')
li = doc1('.list .item-0.active')
li.attr('name','list')
print(li)
li.text('changed item')
print(li)
li.html('<a name="clad">changed item</a>')
print(li)
'''output:
修改属性, 文本, html文本
<li class="item-0 active" name="list">this is a li<a href="link3.html">third item</a></li>

<li class="item-0 active" name="list">changed item</li>

<li class="item-0 active" name="list"><a name="clad">changed item</a></li>
'''
3.remove()删除节点
print('删除节点')
li = doc1('.wrap .item-1.active')
print(li.text())
li.find('a').remove()
print(li.text())

六. 遍历

# 使用方法item()即可将返回的标签生成为生成器用于for遍历
print("遍历:")
li = doc1('.wrap .list li').items()
for li in li:
    print(li, end='')
'''output:
遍历:
<li class="item-0">first item</li>
<li class="item-1">this is a li<a href="link2.html">second item</a></li>
<li class="item-0 active">this is a li<a href="link3.html">third item</a></li>
<li class="item-1 active">this is a li<a href="link4.html">third item</a></li>
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值