pyquery的使用


Pyquery

Pyquery是一个类似css选择器的东西,在解析HTML文本的时候需要先将其初始化为PyQuery对象.

初始化

字符串初始化

直接将HTML的内容当作初始化参数.

from pyquery import PyQuery as pq
html = '''
<div>
    <li>first</li>
    <li><a href = 'item2'>second</a></li>
    <li><a href = 'item3'><span>third</span></a></li>
    <li><a href = 'item4'>fourth</a></li>
    <li><a href = 'item5'>fifth</a></li>
</div>
'''

doc = pq(html)
print(doc('li'))##输出所有li节点

URL初始化

还可以把一个网址的URL直接给PyQuery实例化,PyQuery对象就会请求这个URL,得到HTML内容进行初始化,效果与字符串初始化类似.

文件初始化

还可以选择本地的文件进行初始化,参数指定为filename即可

from pyquery import PyQuery as pq

doc = pq(filename=path)
print(doc('li'))##输出所有li节点

基本CSS选择器

首先,在CSS选择器中,.表示class属性,#表示id属性.

from pyquery import PyQuery as pq
html = '''
<div id='container'>
    <li>first</li>
    <li><a href = 'item2'>second</a></li>
    <li><a href = 'item3'><span>third</span></a></li>
    <li><a href = 'item4'>fourth</a></li>
    <li><a href = 'item5'>fifth</a></li>
</div>
'''

doc = pq(html)
print(doc('#container .item3 span'))##先选取id为container的节点,再选取内部节点里面class为item1的节点内部为span的节点 既 <span>third</span>,其类型也是PyQuery类

查找节点

子节点

find方法返回所有符合要求的子孙节点(子和孙),children方法返回所有满足要求的子节点.

父节点

使用parent方法获取某个节点的父节点

from pyquery import PyQuery as pq
html = '''
<div id='container'>
    <li class='list'>first</li>
    <li><a href = 'item2'>second</a></li>
    <li><a href = 'item3'><span>third</span></a></li>
    <li><a href = 'item4'>fourth</a></li>
    <li><a href = 'item5'>fifth</a></li>
</div>
'''

doc = pq(html)
list = doc('.list')
pa = list.parent()
print(pa)
"""
<div id='container'>
    <li class='list'>first</li>
</div>
"""

使用parents方法获取某个节点的所有祖先节点,可以传CSS选择器来筛选祖先节点.

兄弟节点

使用siblings方法获取某个节点的兄弟节点,可以传CSS选择器来筛选兄弟节点.

节点遍历

内容获取

对于单个节点的PyQuery对象,可以直接输出,如果是多个节点的PyQuery对象,则需要使用items方法将其转换成生成器,再使用for来输出.

from pyquery import PyQuery as pq
html = '''
<div id='container'>
    <li class='list'>first</li>
    <li><a href = 'item2'>second</a></li>
    <li><a href = 'item3'><span>third</span></a></li>
    <li><a href = 'item4'>fourth</a></li>
    <li><a href = 'item5'>fifth</a></li>
</div>
'''

doc = pq(html)
list = doc('li')
lis = list.items()
for each in lis:
    print(lis)

属性获取

使用attr方法获取属性,如果是多个节点的话默认返回第一个节点的属性,所以需要前面的items方法.

获取文本

使用text方法获取节点内部的文本(相当于拆掉了外面的标签)

节点操作

方法 描述
removeClass/addClass 修改class属性
attr 增添属性种类及其内容(需要两个参数,一个是属性名,一个是属性值)
text 修改文本(同attr)
html 直接修改html文件(同attr)
remove 移除节点

伪类选择器

伪类选择器的语法格式:

css选择器:选择性质

例如

li:first-child   第一个li子节点
li:last-child    最后一个li子节点
li:nth-child(2)  第二个li子节点
li:nth-child(2n) 偶数个子节点
li:contains(second) 包含second文本的子节点

Author: Dovahkiin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Dovahkiin !
  TOC