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文本的子节点