[Python] pyquery使用
2020-04-23 本文已影响0人
半为花间酒
内容是以前的学习笔记,内容不全,主观性较大,欢迎参考
1. 初始化对象
from pyquery import PyQuery as pq
doc = pq(html) # 源代码字符串初始化,最常用
doc = pq(url='http://cuiqingcai.com') # url初始化
doc = pq(filename='demo.html') # 文件初始化
2. 基本CSS选择器
初始化后以及每次查找后类型为<class 'pyquery.pyquery.PyQuery'>
doc = pq(html)
items = doc('.list #style p')
lis = items.find('li') # find() 全部子孙节点
lis = items.children('.active') # children() 直接子节点
parents = items.parents() # parents() 全部祖先节点
container = items.parent() # parent() 直接父节点
li = doc('.list .item-0.active').siblings() # siblings() 全部兄弟节点
pyquery的选择结果无论单个还是多个均为PyQuery类型,需要遍历需要用items()
doc = pq(html)
lis = doc('li').items() # <class 'generator'>
for li in lis:
print(li) # <class 'pyquery.pyquery.PyQuery'>
遍历后即可提取信息:
# 获取节点属性
li.attr('href')
li.attr.href
# 以上方法如果有多个则只返回第一个,故需要调用items()
# 也可以调用html()返回html文本,同要需要items()
text()
比较特殊,无需遍历就可以获取文本,所有节点取文本之后合并成一个字符串,中间用一个空格分割开。
3. 节点操作
pyquery提供了一系列方法来对节点进行动态修改
<li class="item-0 active"><span class="bold">third item</span></li>
-
addClass()
和removeClass()
可以动态改变节点的class属性
li = pq(html)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)
<li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
-
attr()
、text()
和html()
传入额外参数即为修改。传入一个参数则是获取数值
li.attr('name', 'link')
print(li)
li.text('changed item')
print(li)
li.html('<span>changed item</span>')
print(li)
<li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active" name="link">changed item</li>
<li class="item-0 active" name="link"><span>changed item</span></li>
-
remove()
可以与
text()
配合使用
li = find('p').remove()
li = doc('li:first-child') # 第一个直接子节点li
li = doc('li:last-child') # 最后一个直接子节点li
li = doc('li:nth-child(2)') # 第二个直接子节点li
li = doc('li:gt(2)') # 第三个li之后的li节点
li = doc('li:contains(second)') # 包含second文本的li节点